如何通过Storyboard设置圆角?layer.cornerRadius对应Type选什么
Storyboard配置
layer.cornerRadius的Type选择说明 - 直接答案:Type选择Number即可。
- 注意你写的
frame.size.height / 2不能直接填在Value输入框里生效:Storyboard的User Defined Runtime Attributes是在nib加载时给属性赋静态值,不支持运行时动态计算表达式,你填这个计算式不会被解析,最终圆角设置会失效。
layer.cornerRadius对应的原生类型是CGFloat,在Storyboard的运行时属性配置项里,所有数值类的标量类型统一对应Number选项,选其他类型(String/Point/Size/Rect等)会出现类型不匹配,要么设置无效,要么触发运行时解析错误。
如果要实现控件半高圆角(也就是胶囊形/正圆形效果),分两种场景处理:
- 如果控件的尺寸在Storyboard里是写死固定值:你手动算好高度一半的具体数值填到Value栏就行,比如控件固定高度50,就填25,Type保持Number。
- 如果控件会随屏幕尺寸、内容自适应变化:不要在Storyboard里配置这个key path,在对应控件的子类代码里重写
layoutSubviews方法,在方法内给self.layer.cornerRadius赋值为self.bounds.size.height / 2,同时设置layer.masksToBounds = true即可,这种方式会在每次控件布局更新时重新计算圆角值,不会出现尺寸变化后圆角错位的问题。
记得配置圆角的同时要把对应layer的masksToBounds属性设为true,否则圆角不会裁切生效
内容的提问来源于stack exchange,提问作者Heli Bhadeshiya
相关产品推荐
相关产品推荐

