2015-04-11 9 views
9
to Border

Ich erstelle eine UILabel, auf denen ich die Hintergrundfarbe und Eckenradius mit dem folgenden Code ein:UILabel Hintergrundfarbe Leaks

self.scoreLabel.backgroundColor = [UIColor DISRed];// custom red` 
self.scoreLabel.layer.masksToBounds = YES; 
self.scoreLabel.layer.cornerRadius = self.scoreLabel.frame.size.width/2; 
self.scoreLabel.layer.borderWidth = 8.0; 
self.scoreLabel.layer.borderColor = [[UIColor DISNavy] CGColor]; 

jedoch die Farbe des Hintergrunds scheint an den Rand der undichten zu werden Grenze (siehe Bild). Irgendwelche Ideen warum? Irgendeine Idee, wie man es repariert?

enter image description here

+0

Nun, Sie müssen zugeben, dass Sie bisher den einfachen Ausweg genommen haben. Sie verwenden eine integrierte View-Unterklasse (UILabel) und lassen einfache Ebenenbefehle für Sie arbeiten und hoffen auf das Beste. Wenn Sie eine Zahl in einem Kreis haben möchten, warum ziehen Sie dann keine Zahl in einem Kreis? Ja, es dauert ein wenig mehr Code, aber jetzt haben Sie die totale Kontrolle darüber, was der Benutzer sehen wird. – matt

+2

Ich gebe es zu, es ist der einfache Ausweg. Warum sollte ich zuerst auf die harte Tour gehen? Wenn es keinen direkten Weg gibt, dies mit diesem Ansatz zu erreichen, werde ich eine andere Option in Erwägung ziehen. –

+0

Sie sehen, ich denke, es ist einfacher zu zeichnen. – matt

Antwort

0

Ich habe UILabel wie diese und Hintergrundfarbe scheinen nicht .. undicht werden

1) schreiben in .h-Datei Ihres Projekts.

UILabel *label; 

2) Schreiben Sie dies in .m-Datei Ihres Projekts.

label=[[UILabel alloc]initWithFrame:CGRectMake(100, 300, 100, 100)];//Set frame of label in your viewcontroller. 
[label setBackgroundColor:[UIColor redColor]];//Set background color of label. 
[label setText:@"Label"];//Set text in label. 
[label setTextColor:[UIColor blackColor]];//Set text color in label. 
[label setTextAlignment:NSTextAlignmentCenter];//Set text alignment in label. 
[label.layer setCornerRadius:50.0];//Set corner radius of label to change the shape. 
[label.layer setBorderWidth:8.0f];//Set border width of label. 
[label setClipsToBounds:YES];//Set its to YES for Corner radius to work. 
[label.layer setBorderColor:[UIColor greenColor].CGColor];//Set Border color. 
[self.view addSubview:label];//Add it to the view of your choice. 
1

Ich stieß auf das gleiche Problem mit der Hintergrundfarbe des UIButton leaking um den Rand seines Randes.

Anstatt die UIButton-Hintergrundfarbe für die UIButton festzulegen, legen Sie sie auf der Ebene der UIButton fest.

ersetzen:

self.scoreLabel.backgroundColor = [UIColor DISRed];// custom red` 

mit diesem:

self.scoreLabel.layer.backgroundColor = [[UIColor DISRed] CGColor];// custom red` 
+2

hat es nicht für mich behoben. :(Weißt du, was die Ursache des Problems ist? –

+0

DIESES ARBEITET NICHT! – coolcool1994

0

Es ist wahrscheinlich Anti-Aliasing-Problem. Sie können es besser beheben, indem Sie einen Bezier-Pfad um die Ecken hinzufügen.

CAShapeLayer *subLayer = [[CAShapeLayer alloc] init]; 
[subLayer setFillColor:[UIColor clearColor].CGColor]; 
[subLayer setStrokeColor:[UIColor whiteColor].CGColor]; 
[subLayer setLineWidth:1.0]; 
[subLayer setPath:[UIBezierPath bezierPathWithRoundedRect:imageView.bounds cornerRadius:imageView.layer.cornerRadius].CGPath]; 
[imageView.layer addSublayer:subLayer]; 
1

Ich war auch mit dem gleichen Problem konfrontiert. Es war ein dummer Fehler. Ich vergesse immer, clipToBounds im Falle von cornerRadius zu kreuzen.

Also, nur die Clip to Bounds für UILabel im Storyboard ticked behoben mein Problem.

Und ja, müssen wir auch den Code unten halten: "Jede Idee, wie man es beheben"

label.layer.masksToBounds = true 
Verwandte Themen