Я работаю над приложением без использования storyboards
. У меня есть navBar
внутри StackView
. Я установил ярлыки под ним, которые хорошо вписываются. Но у меня проблема в том, что ограничения, которые я установил на labels
, не применяются. Я потратил много времени на это, но я не знаю, почему ошибка и как ее отладить.
![image screenshot](https://i.stack.imgur.com/Y54BWl.png)
class SellBaseViewController: UIViewController {
lazy var container: UIStackView = {
let stackView = UIStackView(frame: .zero)
stackView.alignment = .fill
stackView.axis = .vertical
stackView.spacing = 2
stackView.willSetConstraints()
return stackView
}()
lazy var navHeader: UIView! = {
return self.navBar()
}()
lazy var firstLabel: UILabel! = {
return self.labelOne()
}()
lazy var secondLabel: UILabel! = {
return self.labelTwo()
}()
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
if !Authentication.shared.isAuthenticated {
showLogin()
} else {
self.setupInterface()
}
}
private func setupInterface() {
self.navigationController?.navigationBar.isHidden = true
self.embedInScrollView(content: self.container)
navHeader.willSetConstraints()
firstLabel.willSetConstraints()
secondLabel.willSetConstraints()
self.container.addArrangedSubviews([self.navHeader!, self.firstLabel!, self.secondLabel!])
DispatchQueue.main.async {
NSLayoutConstraint.activate([
self.navHeader.heightAnchor.constraint(equalToConstant: 44),
self.navHeader.widthAnchor.constraint(equalTo: self.view.widthAnchor),
self.navHeader.topAnchor.constraint(equalTo: self.container.topAnchor),
//constraints not getting applied.
self.firstLabel.topAnchor.constraint(equalTo: self.navHeader.bottomAnchor, constant: 70),
self.firstLabel.leftAnchor.constraint(equalTo: self.navHeader.leftAnchor, constant: 70),
self.secondLabel.topAnchor.constraint(equalTo: self.firstLabel.bottomAnchor, constant: 70),
self.secondLabel.leftAnchor.constraint(equalTo: self.firstLabel.leftAnchor, constant: 70),
])
}
}
// MARK: NAVBAR
func navBar() -> UIView {
let navBar = UIView(frame: CGRect(origin: CGPoint(x: 0, y: 0), size: CGSize(width: self.view.frame.width, height: 44)))
navBar.backgroundColor = UIColor.constants.darkBlue
let backIcon = UIImage(named: "ic_back")?.withRenderingMode(.alwaysTemplate)
let returnButton = UIButton(type: .custom)
returnButton.imageView?.tintColor = UIColor.white
returnButton.setImage(backIcon, for: .normal)
returnButton.image(for: .normal)
returnButton.titleLabel?.font = UIFont(name: "Hind", size: 18)
returnButton.setTitle("Sell", for: .normal)
returnButton.setTitleColor(UIColor.white, for: .normal)
returnButton.addTarget(self, action: #selector(self._return), for: .touchUpInside)
returnButton.willSetConstraints()
navBar.addSubviews([returnButton])
NSLayoutConstraint.activate([
returnButton.centerYAnchor.constraint(equalTo: navBar.centerYAnchor),
returnButton.leadingAnchor.constraint(equalTo: navBar.leadingAnchor, constant: 11),
returnButton.heightAnchor.constraint(equalToConstant: 24),
returnButton.widthAnchor.constraint(equalToConstant: 71),
])
return navBar
}
func labelOne() -> UILabel{
let label = UILabel()
label.textAlignment = .center
label.textColor = .black
label.font = UIFont(name: "RobotoBold", size: 23.5)?.bold
label.text = "What do you want to sell?"
self.view.addSubview(label)
return label
}
func labelTwo() -> UILabel{
let label = UILabel()
label.textAlignment = .center
label.textColor = .black
label.font = UIFont(name: "Avenir-Light", size: 14.5)
label.text = "We'll fit your photo for better viewing experience."
self.view.addSubview(label)
return label
}
@objc func _return() {
self.backHome()
}
}
![expected outcome](https://i.stack.imgur.com/XqLuIl.jpg)