У меня есть следующий экран, чтобы центрировать прямоугольники между uilabel и клавиатурой, я создал простой расчет, в котором я добавил высоту заголовка, затем высоту uilabel, а затем высоту клавиатуры минус весь размер экрана и разделил все на два для того, чтобы получить центральную точку [я добавил код ниже, хотя это не актуально]
Проблема в том, что для получения высоты UILabels мне нужно установить ограничения в viewDidLayoutSubviews (). Теперь идея состоит в том, что каждый раз, когда вы заполняете один блок, следующий блок становится первым респондентом, но это не работает, потому что каждый раз, когда блок становится первым респондентом, вызывается viewDidLayoutSubviews ().
Что я могу с этим сделать? Есть ли способ получить высоту uiLabel без вызова viewDidLayoutSubviews ().
Это код для центрирования полей:
override func viewDidLayoutSubviews() {
let allItems = headerC.frame.height + stackViewOfDefin.frame.height + 270 + 20
let getSpace = UIScreen.main.bounds.height - allItems
let stackview = UIStackView(arrangedSubviews: gameBoxes)
stackview.axis = .horizontal
stackview.spacing = 5
stackview.distribution = .fillEqually
stackview.translatesAutoresizingMaskIntoConstraints = false
self.view.addSubview(stackview)
NSLayoutConstraint.activate([
stackview.topAnchor.constraint(equalTo: secondLine.bottomAnchor, constant: getSpace/2-30),
stackview.centerXAnchor.constraint(equalTo: self.view.centerXAnchor),
stackview.leadingAnchor.constraint(greaterThanOrEqualTo: view.leadingAnchor, constant: 10),
stackview.trailingAnchor.constraint(lessThanOrEqualTo: view.trailingAnchor, constant: -10)
])
}