故事板上方向转换后自定义渐变按钮的大小调整

Resize of custom gradient button after orientation transition on Storyboard

我的自定义按钮的自动布局有问题。

我为按钮创建了一个自定义 class 以通过界面生成器添加渐变颜色。

@IBDesignable
class GradientButton: UIButton {

    private let gradientLayer = CAGradientLayer()

    @IBInspectable
    var topGradientColor: UIColor? {
        didSet {
            setGradient(topGradientColor: topGradientColor, bottomGradientColor: bottomGradientColor)
        }
    }

    @IBInspectable
    var bottomGradientColor: UIColor? {
        didSet {
            setGradient(topGradientColor: topGradientColor, bottomGradientColor: bottomGradientColor)
        }
    }




    private func setGradient(topGradientColor: UIColor?, bottomGradientColor: UIColor?) {
        if let topGradient = topGradientColor, let bottomGradient = bottomGradientColor {

            self.layer.masksToBounds = true
            gradientLayer.frame = bounds
            gradientLayer.colors = [topGradient.cgColor, bottomGradient.cgColor]
            gradientLayer.borderColor = layer.borderColor
            gradientLayer.borderWidth = layer.borderWidth
            gradientLayer.cornerRadius = layer.cornerRadius

            layer.insertSublayer(gradientLayer, at: 0)

        } else {
            gradientLayer.removeFromSuperlayer()
        }

    }
}

使用该自定义 class 我可以在 Interface Builder 上设置渐变颜色,并立即在我的故事板上看到结果。

问题是:当我将方向切换为水平方向时,我的按钮只绘制了一半。

好像由于某种原因没有应用新调整大小的参数。 好像是什么问题?

将此添加到您的 GradientButton class:

override var bounds: CGRect {
    didSet {
        setGradient(topGradientColor: topGradientColor, bottomGradientColor: bottomGradientColor)
    }
}