UIButton 圆角半径在 CustomClass 中无法正常工作
Posted
技术标签:
【中文标题】UIButton 圆角半径在 CustomClass 中无法正常工作【英文标题】:UIButton corner radius not working properly in CustomClass 【发布时间】:2019-05-03 06:00:39 【问题描述】:我已经为 UIButton
创建了一个自定义类,但在小屏幕设备中,例如iPhone 5s
cornerRadius
无法正常工作
您必须仔细观察才能看到UiButton
的cornerRadius
不是完全圆润的
class customRoundButton: UIButton
override func awakeFromNib()
self.layer.cornerRadius = (self.layer.frame.height / 2)
self.layer.borderColor = fontColor.defualtBlue.cgColor
self.layer.borderWidth = 1
self.layer.clipsToBounds = true
self.layer.layoutIfNeeded()
【问题讨论】:
将self.layer.cornerRadius = (self.layer.frame.height / 2)
改为layoutSubviews
。你也可以去掉self.layer.layoutIfNeeded()
这一行。
正如@AndréSlotta 提到的那样,在func layoutSubviews()
方法中设置你的圆角半径
运气不好,行不通。
@Bhavesh 你能显示你更新的代码吗?
@Bhavesh 这里没有运气。你试过了吗?
【参考方案1】:
在awakeFromNib
中设置cornerRadius
为时过早。请改用layoutSubviews
:
class CustomRoundButton: UIButton
override func awakeFromNib()
super.awakeFromNib()
layer.borderColor = UIColor.blue.cgColor
layer.borderWidth = 1
override func layoutSubviews()
super.layoutSubviews()
layer.cornerRadius = layer.frame.height / 2
【讨论】:
【参考方案2】:试试
override func layoutSubviews()
super.layoutSubviews()
self.layer.cornerRadius = self.bounds.height * 0.50
所以当你的自定义 UIButton 将被添加到子视图时,它会知道它的边界,你只需将角半径指定为边界高度的一半。
【讨论】:
【参考方案3】:最好使用IBDesignable
:
@IBDesignable
class RoundedButton: UIButton
@IBInspectable var cornerRadius: CGFloat = 3.0
didSet
self.layer.cornerRadius = cornerRadius
override func prepareForInterfaceBuilder()
super.prepareForInterfaceBuilder()
self.setupView()
override func awakeFromNib()
super.awakeFromNib()
self.setupView()
func setupView()
self.layer.masksToBounds = false
self.layer.cornerRadius = cornerRadius
【讨论】:
【参考方案4】:我在这里偶然发现了这个问题,并发现在 Swift 5 中最有效的方法是在 awakeFromNib
内设置角半径 Disptatch.main.async
当使用 layoutSubviews
或 setNeedsLayout
时,每一个微小的变化或移动。这可能适用于某些用例。上面的例子我没有试过。
我的代码如下所示:
override func awakeFromNib()
super.awakeFromNib()
imageView.layer.masksToBounds = false
imageView.clipsToBounds = true
DispatchQueue.main.async
self.imageView.layer.cornerRadius = self.imageView.bounds.height / 2.0
【讨论】:
以上是关于UIButton 圆角半径在 CustomClass 中无法正常工作的主要内容,如果未能解决你的问题,请参考以下文章
Swift 3 - 自定义 UIButton 半径删除约束?