2015-04-11 19 views
9

Tôi đang tạo UILabel mà tôi đặt màu nền và bán kính góc với đoạn mã sau:UILabel Rò rỉ Màu nền biên giới

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

Tuy nhiên màu sắc của nền dường như bị rò rỉ tới mép của đường viền (xem hình ảnh). Bất kỳ ý tưởng tại sao? Bất kỳ ý tưởng về cách sửa chữa nó?

enter image description here

+0

Vâng, bạn phải thừa nhận rằng cho đến nay bạn đã thực hiện một cách dễ dàng. Bạn đang sử dụng lớp con được xem sẵn (UILabel) và bạn cho phép các lệnh lớp đơn giản làm tất cả công việc cho bạn và hy vọng điều tốt nhất. Nếu bạn muốn một số trong một vòng tròn, tại sao bạn không _draw_ một số trong một vòng tròn? Có, phải mất thêm một chút mã, nhưng bây giờ bạn có toàn quyền kiểm soát những gì người dùng sẽ thấy. – matt

+2

tôi thừa nhận nó, đó là cách dễ dàng. tại sao tôi sẽ thử cách cứng đầu tiên? nếu không có cách nào thẳng về phía trước để hoàn thành nó với cách tiếp cận này, tôi sẽ xem xét một tùy chọn khác. –

+0

Bạn thấy đấy, tôi nghĩ chỉ vẽ nó đơn giản hơn. – matt

Trả lời

0

Tôi tạo ra UILabel như thế này và màu nền là dường như không bị rò rỉ ..

1) Viết này trong file .h của dự án của bạn.

UILabel *label; 

2) Viết tệp .m này vào dự án của bạn.

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

Tôi gặp phải vấn đề tương tự với màu nền của UIButton bị rò rỉ xung quanh mép biên giới của nó.

Thay vì đặt màu nền UIButton trên UIButton, hãy đặt màu đó trên lớp của UIButton.

Thay thế:

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

Với điều này:

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

không khắc phục được sự cố cho tôi. : (Bạn có biết nguyên nhân gốc rễ của vấn đề là gì? –

+0

LÀM VIỆC LÀM NÀY! – coolcool1994

0

Nó có lẽ là vấn đề chống răng cưa. bạn có thể sửa chữa nó tốt hơn bằng cách thêm một con đường bezier xung quanh các góc.

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

Tôi cũng gặp phải vấn đề tương tự. Đó là một sai lầm ngớ ngẩn. Tôi luôn quên đánh dấu clipToBounds trong trường hợp cornerRadius.

Vì vậy, chỉ cần đánh dấu Clip để giới hạn cho UILabel trong Bảng phân cảnh đã khắc phục được sự cố của tôi.

Và vâng, chúng ta cần phải giữ mã dưới đây quá: "Bất kỳ ý tưởng về làm thế nào để sửa chữa nó"

label.layer.masksToBounds = true