我正在创建一个UILabel,我使用以下代码设置背景颜色和角半径:
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];
然而,背景的颜色似乎泄漏到边框的边缘(见图)。有什么想法吗?有关如何修复的想法吗?
答案 0 :(得分:4)
我也遇到了同样的问题。这是一个愚蠢的错误。如果是clipToBounds
,我总是忘记勾选cornerRadius
。
所以,只需勾选Storyboard中UILabel
的Clip to Bounds即可解决问题。
是的,我们还需要保留以下代码:
label.layer.masksToBounds = true
答案 1 :(得分:1)
我这样创建了UILabel,背景颜色似乎没有泄漏..
1)将此内容写入项目的.h文件中。
UILabel *label;
2)将此内容写入项目的.m文件中。
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.
答案 2 :(得分:1)
我遇到了同样的问题,UIButton的背景颜色在其边缘边缘漏出。
不要在UIButton上设置UIButton背景颜色,而是在UIButton的图层上设置它。
替换:
self.scoreLabel.backgroundColor = [UIColor DISRed];// custom red`
有了这个:
self.scoreLabel.layer.backgroundColor = [[UIColor DISRed] CGColor];// custom red`
答案 3 :(得分:0)
可能是抗锯齿问题。您可以通过在角落周围添加贝塞尔曲线来更好地修复它。
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];
答案 4 :(得分:0)
对于那些仍然面临边框颜色泄漏问题的人: 通过下面的代码,请注意,您需要根据需要设置框架和边框宽度,我将位置设置为视图的中心
let badgeSize: CGFloat = 10
let redBadge = UIView(frame: CGRect(x: view.center.x, y:view.center.y, width: badgeSize, height: badgeSize))
redBadge.layer.borderColor = UIColor.white.cgColor
redBadge.layer.borderWidth = 2
redBadge.backgroundColor = .red
redBadge.layer.cornerRadius = badgeSize * 0.5
redBadge.clipsToBounds = true
redBadge.layer.masksToBounds = true
redBadge.maskLayerOnView(radius: badgeSize * 0.5)
view.addSubview(redBadge)
第二,我们需要在UIView上编写扩展名
extension UIView{
func maskLayerOnView(radius: CGFloat){
let maskLayer = CAShapeLayer()
maskLayer.path = UIBezierPath(roundedRect: self.bounds,
byRoundingCorners: [.allCorners],
cornerRadii: CGSize(width: radius,
height: radius)).cgPath
self.layer.mask = maskLayer
}
}
此代码段消除了边界色,可以在任何类型的视图上复制这种行为。
有关详细说明,请参见this article。
答案 5 :(得分:0)
好吧,答案很多...
我发现问题仍然存在,只要使用UIViews背景色而不是UIViews“图层”的背景色即可。另外,当然,需要启用屏蔽。
对于UICollectionViewCell子类,代码为:
- (void)prepare
{
self.contentView.layer.backgroundColor = UIColor.redColor.CGColor;
self.contentView.layer.cornerRadius = 25.0;
self.contentView.layer.borderColor = UIColor.blackColor.CGColor;
self.contentView.layer.borderWidth = 1.0;
//Enable to optimize image views: self.contentView.layer.shouldRasterize = YES;
//Enable to optimize image views: self.contentView.layer.rasterizationScale = UIScreen.mainScreen.scale;
self.contentView.layer.masksToBounds = YES;
self.contentView.clipsToBounds = YES;
}
要使背景色的设置更舒适且更不易出错,可以添加以下内容:
/*
setBackgroundColor:
*/
- (void)setBackgroundColor:(UIColor *)p_BackgroundColor
{
super.backgroundColor = nil;
self.contentView.layer.backgroundColor = p_BackgroundColor.CGColor;
self.contentView.layer.masksToBounds = YES;
self.contentView.clipsToBounds = YES;
}