我为我的按钮添加了一个自定义类,我在其中设置角半径(为多个 VC 保存一些代码)但是一旦我设置它,我的按钮的标题就会消失。您可以看到我设置了一个按钮标题,在选择自定义类之前它工作正常。
我的按钮的背景是带有 alpha 的灰色。我曾尝试使用 .isOpaque 设置,但没能拿回标题。知道是什么导致了这个问题吗?
@IBDesignable class RoundedButton: UIButton {
@IBInspectable var cornerRadius: CGFloat = 8
override func layoutSubviews() {
layer.cornerRadius = cornerRadius
}
}
编辑:已解决!谢谢你/僵尸的解释!
最佳答案
标题没有显示,因为它的框架没有更新。
要修复布局,您需要调用 super.layoutSubviews
override func layoutSubviews() {
super.layoutSubviews()
layer.cornerRadius = cornerRadius
}
您的方法可能会阻止对变量之外的半径进行任何更新。
这里有一个更好的方法:
@IBDesignable class RoundedButton: UIButton {
private var defaultCornerRadius: CGFloat = 8
@IBInspectable var cornerRadius: CGFloat {
get {
return layer.cornerRadius
}
set {
layer.cornerRadius = newValue
}
}
override init(frame: CGRect) {
super.init(frame: frame)
cornerRadius = defaultCornerRadius
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
cornerRadius = aDecoder.decodeObject(forKey: "cornerRadius") as? CGFloat ?? defaultCornerRadius
}
override func encode(with aCoder: NSCoder) {
super.encode(with: aCoder)
aCoder.encode(cornerRadius, forKey: "cornerRadius")
}
}
关于ios - UIButton 的 layer.cornerRadius 移除按钮标题的可见性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51352386/