UIButton的layer.cornerRadius删除按钮标题的可见性

时间:2018-07-15 21:29:55

标签: ios swift xcode uibutton storyboard

我为按钮添加了一个自定义类,在其中设置了拐角半径(以保存多个VC的代码),但是一旦设置,按钮标题便消失了。您可以看到我设置了按钮标题,并且在选择自定义类之前可以正常工作。

按钮的背景是带有alpha的灰色。我曾尝试使用.isOpaque设置,但运气不佳,无法获得冠军头衔。知道什么会导致此问题吗?

@IBDesignable class RoundedButton: UIButton {

    @IBInspectable var cornerRadius: CGFloat = 8

    override func layoutSubviews() {
        layer.cornerRadius = cornerRadius
    }
}

Storyboard

编辑:已解决!谢谢你的僵尸!

2 个答案:

答案 0 :(得分:2)

由于标题的框架未更新,因此标题未显示。

要修复布局,您需要致电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")
    }
}

答案 1 :(得分:1)

你忘记了

override func layoutSubviews() {
    super.layoutSubviews()
    layer.cornerRadius = cornerRadius
}