#ios #swift
#iOS #swift
Вопрос:
Я добавил вложенный просмотр в свой исходный вид в раскадровке. Я установил высоту и ширину моего подвида в раскадровке и принял их ограничения.
@IBOutlet var childViewHeightConstraint: NSLayoutConstraint!
@IBOutlet var childViewWidthConstraint: NSLayoutConstraint!
Я хочу изменить центр моего подвида в viewDidLoad, но он не работает.
subView.center = parentView.center
childViewHeightConstraint.constant = 400
childViewWidthConstraint.constant = 500
Также обратите внимание, что я изменяю высоту и ширину своих дочерних просмотров в viewDidLoad. Ограничения childViewHeightConstraint и childViewWidthConstraint работают, но центрирование не работает.
Комментарии:
1. Почему вы не добавили ограничения centerHorizontally и centervertically в саму раскадровку?
2. Потому что я хочу изменить его центр в другом месте моего кода.
3. попробуйте так DispatchQueue.main.asyncAfter(крайний срок: .now() 0,5) { subView.center = родительский просмотр.center childViewHeightConstraint.constant = 400 childViewWidthConstraint.constant = 500 }
Ответ №1:
Вам нужно добавить centerX
и centerY
ограничения subView
с parentView
, т.е.
subView.centerXAnchor.constraint(equalTo: parentView.centerXAnchor).isActive = true
subView.centerYAnchor.constraint(equalTo: parentView.centerYAnchor).isActive = true
Ответ №2:
Если вы настаиваете на использовании subView.center = parentView.center
, попробуйте поместить его в viewDidAppear. Родительский вид еще не «отображается» в viewDidLoad, поэтому при настройке центра подвида ничего не происходит.
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear()
subView.center = parentView.center
}
Но я думаю, что это не лучшее решение для изменения положения вложенного представления, вы можете рассмотреть возможность использования ограничения центра, как @PGDev упомянул в своем ответе.
Ответ №3:
Хорошо, ответ @dhawal сработал для меня.
DispatchQueue.main.asyncAfter(deadline: .now() 0.5) {
subView.center = parentView.center
childViewHeightConstraint.constant = 400
childViewWidthConstraint.constant = 500
}