UILabel Vazamentos de cor de fundo para borda

10

Estou criando um UILabel para o qual defino a cor do plano de fundo e o raio do canto com o seguinte código:

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

No entanto, a cor do plano de fundo parece estar vazando para a borda da borda (veja a imagem). Alguma idéia por quê? Alguma idéia de como consertar isso?

    
por Julian B. 11.04.2015 в 02:00
fonte

4 respostas

3

Eu também estava enfrentando o mesmo problema. Foi um erro bobo. Eu sempre esqueço de marcar clipToBounds no caso de cornerRadius .

Então, apenas marcar o clipe com limites para UILabel no Storyboard corrigiu meu problema.

E sim, precisamos manter o código abaixo também:

label.layer.masksToBounds = true
    
por Sushil Sharma 24.11.2017 / 10:49
fonte
1

Eu tive o mesmo problema com a cor de fundo do UIButton vazando ao redor da borda de sua borda.

Em vez de definir a cor de fundo do UIButton no UIButton, defina-o na camada do UIButton.

Substituir:

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

Com isso:

self.scoreLabel.layer.backgroundColor = [[UIColor DISRed] CGColor];// custom red'
    
por Smashriot 25.07.2015 / 17:56
fonte
0

Eu criei o UILabel assim e a cor do plano de fundo não parece estar vazando ..

1) Escreva isso no arquivo .h do seu projeto.

UILabel *label;

2) Escreva isso no arquivo .m do seu projeto.

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.
    
por krushnsinh 17.04.2015 / 11:39
fonte
0

É provavelmente um problema anti-aliasing. você pode consertá-lo melhor adicionando um caminho bezier ao redor dos cantos.

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];
    
por user3693546 30.12.2016 / 11:29
fonte