所以我将在应用程序中有一些不同的圆形按钮(一直到圆形按钮),从我所知,最简单的
方法是设置按钮CALayer的cornerRadius
属性.
@H_
674_2@但是,我不想为每个控制器中需要它的每个按钮手动执行此操作,因此我认为在init上设置此类的简单子类就是这样.
@H_
674_2@我正在使用Storyboard和Autolayout来定位和调整按钮的大小,并将它们分配给这个子类.
@H_
874_6@class RoundedButton: UIButton
{
required init(coder aDecoder: NSCoder)
{
super.init(coder: aDecoder)
self.layer.cornerRadius = self
.bound
s.size.height / 2.0
self.clipsToBounds = true
NSLog("BUTTON BOUNDS: H-%f W-%f",self
.bound
s.size.height,self
.bound
s.size.width)
NSLog("BUTTON FRAME: H-%f W-%f",self.frame.height,self.frame.width)
}
}
@H_
674_2@但是我已经发现,
在这一点上(即初始化),框架和边界的大小都不是最终的.对于故事板中尺寸(和约束)为H40 x W40的按钮,边界/框架尺寸
显示为H30 x W38.
@H_
674_2@这意味着cornerRadius没有得到我期望的值.
@H_
674_2@我已经确认在稍后的某个时间点(例如,当按钮已经响应敲击时)其帧/边界确实是H40 x W40.
@H_
674_2@毕竟,我的问题是,在UIButton子类中,何时/哪里可以使用实例的最终帧/边界值安全地设置cornerRadius?
如果您希望在视图通过AutoLayout
后执行代码,则必须在
调用super.layoutSubviews()后在layoutSubviews中执行此操作.
@H_
674_2@像这样 :
@H_
874_6@class RoundedButton: UIButton
{
override func layoutSubviews()
{
super.layoutSubviews()
layer.cornerRadius = bound
s.size.height / 2.0
clipsToBounds = true
}
}
@H_
674_2@这段
代码并不完美,因为当高度大于宽度时它
不支持(
虽然容易修复……).