Я пытаюсь создать интерфейс регистрации входа в Swift для iOS без использования раскадровки.
С этим кодом в моем контроллере:
loginButton.translatesAutoresizingMaskIntoConstraints = false
loginButton.layer.borderWidth = 1
loginButton.clipsToBounds = true
loginButton.layer.borderColor = UIColor.Palette.boldYellow.cgColor
loginButton.setTitle("Login", for: .normal)
loginButton.setTitleColor(UIColor.Palette.boldYellow, for: .normal)
loginButton.titleLabel?.font = UIFont.boldSystemFont(ofSize: 24)
loginButton.heightAnchor.constraint(equalToConstant: 58).isActive = true
NSLayoutConstraint(item: loginButton, attribute: .leading, relatedBy: .equal, toItem: footerView, attribute: .leading, multiplier: 1, constant: 30).isActive = true
NSLayoutConstraint(item: loginButton, attribute: .trailing, relatedBy: .equal, toItem: footerView, attribute: .trailing, multiplier: 1, constant: -30).isActive = true
NSLayoutConstraint(item: loginButton, attribute: .top, relatedBy: .equal, toItem: footerView, attribute: .top, multiplier: 1, constant: 21).isActive = true
registerButton.translatesAutoresizingMaskIntoConstraints = false
registerButton.clipsToBounds = true
registerButton.setTitle("Register", for: .normal)
registerButton.setTitleColor(.white, for: .normal)
registerButton.titleLabel?.font = UIFont.boldSystemFont(ofSize: 24)
registerButton.heightAnchor.constraint(equalToConstant: 58).isActive = true
NSLayoutConstraint(item: registerButton, attribute: .leading, relatedBy: .equal, toItem: footerView, attribute: .leading, multiplier: 1, constant: 30).isActive = true
NSLayoutConstraint(item: registerButton, attribute: .trailing, relatedBy: .equal, toItem: footerView, attribute: .trailing, multiplier: 1, constant: -30).isActive = true
NSLayoutConstraint(item: registerButton, attribute: .bottom, relatedBy: .equal, toItem: footerView, attribute: .bottom, multiplier: 1, constant: -21).isActive = true
Я могу добиться этого:
Но я бы хотел сделать текст "Регистрация" более жирным, поэтому добавляю следующую строку:
registerButton.titleLabel?.font = UIFont.boldSystemFont(ofSize: 24)
Прямо перед
registerButton.heightAnchor.constraint(equalToConstant: 58).isActive = true
Но тогда весь интерфейс сломан, и я получил это:
Похоже, что изменения, которые я внес в слой обеих кнопок, не применяются.
Я делаю эти изменения слоя в переопределении viewDidLayoutSubviews моего контроллера:
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
let gradientBackgroundButton = CAGradientLayer()
gradientBackgroundButton.frame = registerButton.bounds
gradientBackgroundButton.startPoint = CGPoint.zero
gradientBackgroundButton.endPoint = CGPoint(x: 1, y: 1)
gradientBackgroundButton.colors = [UIColor.Palette.lightYellow.cgColor, UIColor.Palette.boldYellow.cgColor]
registerButton.layer.insertSublayer(gradientBackgroundButton, at: 0)
registerButton.layer.cornerRadius = registerButton.bounds.height / 2
loginButton.layer.cornerRadius = loginButton.bounds.height / 2
}
Я предполагаю, что когда я не указываю размер шрифта, моему представлению необходимо вызывать viewDidLayoutSubviews, а не когда я его указываю. В этом случае, где я должен изменить слой моих кнопок?