Ограниченный фрейм UIButton не обновляется до ограниченного положения кнопок в раскадровке Xcode - PullRequest
0 голосов
/ 04 августа 2020

У меня есть следующий класс, который создает подкласс UIButton. Я настроил это так, чтобы кнопка автоматически ограничивалась супервизором и устанавливала его высоту.

@IBDesignable
class PrimaryButtonConstrained: UIButton {

    @IBInspectable
    var cornerRadius: CGFloat = 8 {
        didSet {
            setupPrimaryConstrainedButton()
        }
    }
       
    @IBInspectable
    var borderWidth: CGFloat = 0 {
        didSet {
            setupPrimaryConstrainedButton()
        }
    }
    
    @IBInspectable
    var topConstraint: CGFloat = 100 {
        didSet {
            layoutSubviews()
        }
    }
       
    override init(frame: CGRect) {
        super.init(frame: frame)
        setupPrimaryConstrainedButton()
    }

    required init?(coder: NSCoder) {
        super.init(coder: coder)
        setupPrimaryConstrainedButton()
    }
       
    override class var requiresConstraintBasedLayout: Bool {
        return true
    }
    
    override func layoutSubviews() {
        super.layoutSubviews()
        translatesAutoresizingMaskIntoConstraints = false
        leadingAnchor.constraint(equalTo: superview!.layoutMarginsGuide.leadingAnchor).isActive = true
        trailingAnchor.constraint(equalTo: superview!.layoutMarginsGuide.trailingAnchor).isActive = true
        heightAnchor.constraint(equalToConstant: 50).isActive = true
        topAnchor.constraint(equalTo: superview!.topAnchor, constant: topConstraint).isActive = true
        
    }
    
    func setupPrimaryConstrainedButton() {
        setTitleColor(.white, for: .normal)
        setTitleColor(.gray, for: .disabled)
        setTitleColor(.orange, for: .highlighted)
        layer.borderWidth = borderWidth
        layer.cornerRadius = cornerRadius
        if isEnabled {
            backgroundColor = .orange
        } else {
            backgroundColor = .gray
        }
        
    }
    
       override public func prepareForInterfaceBuilder() {
            super.prepareForInterfaceBuilder()
            setupPrimaryConstrainedButton()
       }

}

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

broken_button

Есть ли у кого-нибудь идеи, как исправить рамку, чтобы она по-прежнему закрывала кнопку?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...