Изменение размера пользовательской кнопки градиента после ориентационного перехода на раскадровке - PullRequest
1 голос
/ 20 января 2020

У меня проблема с автоматическим макетом для моей пользовательской кнопки.

Я создал пользовательский класс для кнопки, чтобы добавить цвет градиента через конструктор интерфейса.

@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()
        }

    }
}

С этим пользовательским класс Я могу установить цвет градиента в Интерфейсном Разработчике и сразу увидеть результаты на моей раскадровке.

enter image description here

Проблема : Когда я переключаю ориентацию в горизонтальное положение, моя кнопка окрашивается только наполовину.

enter image description here

Похоже, новые измененные параметры не применяются по какой-то причине. В чем проблема?

1 Ответ

2 голосов
/ 20 января 2020

Добавьте это к вашему GradientButton классу:

override var bounds: CGRect {
    didSet {
        setGradient(topGradientColor: topGradientColor, bottomGradientColor: bottomGradientColor)
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...