在iPhone上,如何创建一个带有圆角的UILabel?
问题原因:在iOS 7.1及以后的设备上,为了创建圆角UILabel,需要设置masksToBounds属性为YES,并设置cornerRadius属性为8.0。在iOS 7.1之前的版本,只设置cornerRadius属性是无效的。
解决方法:
1. 在iOS 7.1及以后的设备上,添加以下代码:
yourUILabel.layer.masksToBounds = YES; yourUILabel.layer.cornerRadius = 8.0;
2. 为了在滚动或动画时提高性能,可以设置layer的背景颜色而不是view,以及layer的cornerRadius属性。在iOS 7.1上,这样设置足够了(在只设置cornerRadius属性时,这种方法无效)。
问题的原因是iOS 3.0之前的版本不支持直接设置UILabel的圆角属性。解决方法是使用CALayer的cornerRadius属性来实现圆角效果。具体的步骤如下:
1. 在UIView的子类中,重写drawRect:方法,在该方法中使用Core Graphics的函数绘制一个带有圆角的矩形路径。
2. 创建一个UILabel的实例,并将其作为RoundRectView的子视图。
3. 设置UILabel的frame为RoundRectView的bounds的内缩几个像素的矩形。
4. 通过Interface Builder将RoundRectView放置在视图上,并根据需要连接到Outlet或Action。
如果想要在Interface Builder中实现这个效果,可以通过在Identity Inspector中设置一个User Defined Runtime Attribute,将key path设置为"layer.cornerRadius"。
在iOS 3.0及之后的版本中,可以直接使用view.layer.cornerRadius = 8;来设置圆角。需要注意的是,需要导入QuartzCore框架并引入头文件
需要注意的是,使用view.layer.cornerRadius属性时,整个视图仍然会被绘制(在启用时会在屏幕外绘制),只有在CoreAnimation层级才会裁剪视图。这种方法的代价是,如果将带有圆角属性的视图放在UIScrollView中,会导致滚动性能下降。但是如果只是单个带有圆角的视图,并不会对视图绘制系统产生明显的影响。