[英]UIButton corner radius not working properly in CustomClass
我為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()
}
}
在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
}
}
嘗試
override func layoutSubviews() {
super.layoutSubviews()
self.layer.cornerRadius = self.bounds.height * 0.50
}
因此,當您的自定義 UIButton 將被添加到子視圖時,它會知道它的邊界,您只需將角半徑指定為邊界高度的一半。
最好為此使用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
}
}
我在這里偶然發現了這個問題, Disptatch.main.async
Swift 5 中最有效的awakeFromNib
在Disptatch.main.async
中的awakeFromNib
設置拐角半徑 當使用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
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.