У меня есть контроллер просмотра (с использованием раскадровки, если есть вопросы). Контроллер получил пользовательский вид внутри, назовем его AView
. Вид раскладывается на раскадровку как объект UIView с пользовательским набором классов. Содержимое AView находится на отдельном XIB, потому что мне нужно это многократно использовать повторно. Вот как выглядит код:Изменения в макете iOS в пользовательском представлении не работают до тех пор, пока viewDidAppear не будет вызван
class VC: UIViewController {
@IBOutlet weak var aView: AView!
override func viewDidLoad() {
super.viewDidLoad()
aView.setup(false) //doesn't work
}
override func viewWillAppear(animated: Bool) {
super.viewWillAppear(animated)
aView.setup(false) //doesn't work
}
override func viewDidAppear(animated: Bool) {
super.viewDidAppear(animated)
aView.setup(false) //do work but glitches
}
}
class AView: UIView {
required init?(coder aDecoder: NSCoder) {
//init stuff: loading nib, adding view from it
}
@IBOutlet weak var someView: UIView! //this view has all constraints which are required and additional rightConstraint which is inactive, for future use
@IBOutlet var leftConstraint: NSLayoutConstraint!
@IBOutlet var rightConstraint: NSLayoutConstraint!
func setup(shouldBeOnLeft: Bool) {
leftConstraint.active = true
rightConstraint.active = false
self.layoutIfNeeded()
}
}
Мне нужно настроить этот вид перед его появлением на основе некоторых параметров. Я изменяю только внутренний контент изнутри. Если я позвоню aView.setup(shouldBeOnLeft:)
в viewDidLoad
или viewWillAppear
ограничения не обновляются или, возможно, делают, но я не вижу изменений. Если я переместил его на viewDidAppear
, он работает, но, очевидно, я некоторое время вижу неправильные представления (состояние перед настройкой).
Вопрос заключается в следующем: как заставить его работать по назначению и без контроля вида формы управления представлением и независимо от того, как и где вызывается метод setup
, если он не находится внутри или справа после 0CVC? Единственное, что нужно знать VC - это вызвать настройку с параметром.
params не имеет значения. Важно то, что на основе этого я хотел бы изменить ограничения. то есть 'if params.count == 4 {constraintA.active = false}' – Kubba
@beyowulf Я не понимаю - где я смотрю рамку VC? – Kubba
@beyowulf Я отредактировал пример, чтобы быть более простым в отношении того, что на самом деле делает установка – Kubba