2015-07-21 2 views
2

Я называю API. В зависимости от того, какие данные json я возвращаюсь, я модифицирую свой контроллер View в viewDidLoad(), чтобы изменить дизайн моих просмотров, чтобы отобразить данные наилучшим образом.Быстрое не уверенное на макетеIfNeeded setNeedsUpdateConstraints или updateConstraints setNeedsLayout

Что я могу сделать, чтобы скрыть некоторые UIViews и устанавливать свои ограничения, чтобы быть .active = ложь, но и изменить некоторые ограничения, например, путем:

let noCButton = NSLayoutConstraint(item: aListTop, attribute: NSLayoutAttribute.CenterY, relatedBy: NSLayoutRelation.Equal, toItem: aListBottom, attribute: NSLayoutAttribute.CenterY, multiplier: 1, constant: 0) 
     view.addConstraint(noBidButton) 

Тогда как раз перед закрытием viewDidLoad(), где я изменить/отключить некоторые ограничения я называю view.layoutIfNeeded()

Так что мой вопрос теперь в том,

Если изменить/отключить некоторые ограничения или скрыть UIView, я должен всегда вызывать view.layoutIfNeeded() потом?

Кроме того, мне нужно позвонить view.layoutIfNeeded() сразу после каждого изменения или я могу просто позвонить его один раз перед закрытием viewDidLoad()?

Я не ошибаюсь в своей консоли в любом случае, но я просто хочу убедиться, что я делаю это правильно. Я также отметил, такие функции, как updateConstraints но layoutIfNeeded, кажется, работает, Тхо им не 100% уверен, что разница

Заранее спасибо,

ответ

3

Я бы назвал view.setNeedsUpdateConstraints(). После viewDidLoad(), viewWillLayoutSubviews() следует называть автоматически. Это должно быть все, что вам нужно сделать в этот момент.

Если вам необходимо принудительно обновить представление, немедленно вызовите view.layoutIfNeeded(), если вы хотите сделать набор изменений, а затем применить их на следующем макете, просто позвоните view.setNeedsLayout() в конце всех ваших изменений.

+0

Почему я не могу запустить view.layoutIfNeeded()? Он не выводит никаких ошибок прямо сейчас. И так как я только делаю изменения, как только я это делаю в viewDidLoad – user2722667

+0

Извините, не видел ваши изменения. Хорошо, спасибо! Тогда я просто вызову view.setNeedsLayout() в viewDidLoad? Так как я делаю свои изменения там, и я не хочу отображать представление до тех пор, пока не установил свои изменения. – user2722667

+0

Возможно, вам даже не придется вызывать setNeedsLayout, потому что это произойдет после viewDidLoad в любом случае. – jervine10

Смежные вопросы