2015-04-11 15 views
9

Sto creando un UILabel a cui ho impostato il colore di sfondo e il raggio d'angolo con il seguente codice:UILabel Perdite sfondo di colore a confine

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]; 

Tuttavia il colore del fondo sembra essere che perde a bordo del confine (vedi immagine). Qualche idea, perché? Qualche idea su come risolverlo?

enter image description here

+0

Beh, devi ammettere che finora hai preso la via più facile. Stai utilizzando una sottoclasse di visualizzazione integrata (UILabel) e stai lasciando che i semplici comandi di livello facciano tutto il lavoro per te, e speriamo per il meglio. Se vuoi un numero in una cerchia, perché non _draw_ un numero in una cerchia? Sì, ci vuole un po 'più di codice, ma ora hai il totale controllo di ciò che vedrà l'utente. – matt

+2

lo ammetto, è la via d'uscita facile. perché dovrei provare prima a fatica? se non c'è un modo semplice per realizzarlo con questo approccio, prenderò in considerazione un'altra opzione. –

+0

Vedi, penso che disegnarlo sia più semplice. – matt

risposta

0

ho creato UILabel come questo e il colore di sfondo non sembrano essere che perde ..

1) questo file h del progetto.

UILabel *label; 

2) Scrivere questo file in .m del progetto.

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

Mi sono imbattuto nello stesso problema con il colore di sfondo dell'UIButton che perdeva attorno al bordo del suo bordo.

Invece di impostare il colore di sfondo UIButton su UIButton, impostarlo sul livello di UIButton.

Sostituire:

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

Con questo:

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

non ha risolto il problema per me. :(Sai qual è la causa principale del problema? –

+0

QUESTO NON FUNZIONA! – coolcool1994

0

E 'probabilmente di anti aliasing problema. puoi sistemarlo meglio aggiungendo un percorso di Bezier attorno agli angoli.

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

Anche io stavo affrontando lo stesso problema. È stato uno stupido errore. Ho sempre dimenticato di spuntare clipToBounds in caso di cornerRadius.

Quindi, basta spuntare la Clip ai limiti per UILabel in Storyboard risolto il problema.

E sì, abbiamo bisogno di mantenere il codice qui sotto troppo: "Qualche idea su come risolvere il problema"

label.layer.masksToBounds = true