簡體   English   中英

UIButton 角半徑在 CustomClass 中無法正常工作

[英]UIButton corner radius not working properly in CustomClass

我為UIButton創建了一個自定義類,但在小屏幕設備中,例如iPhone 5s cornerRadius無法正常工作

按鈕看起來像這樣

你必須仔細觀察才能看到UiButtoncornerRadius不是完美的圓角

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 中最有效的awakeFromNibDisptatch.main.async中的awakeFromNib設置拐角半徑 當使用layoutSubviewssetNeedsLayout ,每次小的變化或移動都會調用閉包。 這可能適用於某些用例。 我沒有用上面的例子嘗試過。

我的代碼如下所示:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM