xib如何给UIView设置圆角,为何xib设置UIView边框颜色不显示

在xib中为UIView设置圆角和边框颜色时,遇到显示不正常的问题。layer.cornerRadius和layer.masksToBounds能正常工作,但layer.borderWidth和layer.borderColor设置无效。原因是layer.borderColor需要接收CGColor,而xib中设置的是UIColor。解决方案是通过添加CALayer的分类,创建一个layer.borderColorFromUIColor的Key Path,将UIColor转换成CGColor,使边框颜色在运行时显示正确。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近用xib创建view,遇到一些问题,记录下,希望可以帮到遇到同样问题的童鞋:

xib为何设置UIView圆角不显示:
首先上图:
在这里插入图片描述

xib设置圆角只需要按照图中步骤添加对应Key Path
最常用的Key Path:

  1. layer.cornerRadius ,注意该 key 对应 Value 的 type 应该设置为 String/Number
    两种类型均可(代码设置弧度为:thisViewlayer.masksToBounds = YES)
  2. layer.masksToBounds ,注意该 key 对应 Value 的 type 应该设置为 Boolean ,
    当右侧出现对号时为YES(代码圆角为:thisView.layer.masksToBounds = YES)
  3. layer.borderWidth ,注意该 key 对应 Value 的 type 应该设置为 String/Number
    两种类型均可(代码设置边框宽度为:thisViewlayer.borderWidth = 2)
  4. layer.borderColor , 注意该 key 对应 Value 的 type 应该设置为
    Color(代码设置边框颜色:thisView.layer.borderColor = [UIColor
    redColor].CGColor)

最大的坑:
如果你从上面一直敲下来的话,你会发现只有1和2的两句代码是有效的;3,4两句代码看起来并没有效果

原因:其实是因为在设置borderColor的时候,需要接受的是一个CGColor,而在 key Path中只有Color,其实就是 UIColor,类型是不对的,因此并没有正确显示想要展现的颜色.

平时代码中设置layer的颜色是这样的

self.customView.layer.borderColor = [UIColor blackColor].CGColor;
//而不是 
self.customView.layer.borderColor = [UIColor blackColor];
//所以可以看出,layer 的borderColor接受的CGColor 而不是普通法人UIColor,代码中有区分,那么xib中肯定也必须给CGColor而不是UIColor

因此这样的写法是有问题的,需要在代码中引入一个CALayer的分类:(可以参照下面创建分类,也可以自行百度搜索此分类~~)通过添加一个CALayer的类扩展,将key Path中设置的UIColor转换成为CGColor,xib为边框设置颜色时的Key Path就是上图中的layer.borderColorFromUIColor然后xcode run起来就可以正确看到边框啦,只是在xib文件中好像仍然看不到效果?
CALayer的分类分类实现如下:

#import <QuartzCore/QuartzCore.h>

@interface CALayer (LayerColor)
- (void)setBorderColorFromUIColor:(UIColor *)color;
@end

#import "CALayer+LayerColor.h"
#import <UIKit/UIKit.h>
@implementation CALayer (LayerColor)
- (void)setBorderColorFromUIColor:(UIColor *)color{
    self.borderColor = color.CGColor;
}
@end
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值