2016-11-22 2 views
0

я читал описание viewDidLayoutSubviews из UIViewController:Что такое viewDidLayoutSubviews?

Вызывается уведомить контроллер представления, что его точка зрения просто выложил его подвидов [...] Тем не менее, этот метод вызывается не указывает, что данное лицо были настроены макеты представлений вида. Каждое подчинение отвечает за настройку собственного макета [...].

Для меня это означает: «Вызывается, когда макет субвью завершен, но на самом деле это не так». Так что же стоит за viewDidLayoutSubviews?

+0

Просто, чтобы напомнить вам, если вы нашли полезными, я надеюсь, что вы можете принять ответ ... или какие-либо вопросы по-прежнему вы можете прокомментировать там –

ответ

5

При изменении границ для ViewControllers View этот метод вызывается после изменения позиций и размеров подсмотров.

  1. Так что это наш шанс, чтобы сделать изменения для просмотра после того, как выложила это подвидов, но прежде, чем это видно на экране

  2. Любые изменения, которые в зависимости от границ должно быть сделано , мы можем сделать здесь , а не в ViewDidLoad или ViewWillAppear

  3. Хотя ViewDidLoad & ViewWillAppear, рама и границы с точки зрения являются не завершена. Поэтому, когда AutoLayout сделано это работа фиксирующей MainView и это подвиды, этот метод называется

При использовании autolayout, рамки не называют layoutSubviews каждый раз. Это называется в этих случаях

  • Вращающиеся устройства: вызывает только layoutSubview на родительское представление (Отвечающий viewControllers первичный вид)

  • Его собственные границы (не кадр) изменения (границы. считаются измененными только в том случае, если новое значение отличается, в том числе другое происхождение.)

  • Подраздел добавлен в представление или удален из представления.
  • Ваше приложение заставляет выполнить макет, вызвав метод вида setNeedsLayout или layoutIfNeeded.
  • переметки UIScrollView вызывает layoutSubviews называться на Scrollview и его SuperView

Примечание: Призыв к viewDidLayoutSubviews также зависит от различных факторов, таких как AUTORESIZE маски, используя Auto-Layout или нет, является ли вид в поле зрения иерархии или не

для других разъяснений, проверьте this

+0

не уверен в правильность вашего ответа: когда я изменяю размер подвью, 'viewDidLayoutSubviews' не называется систематически. – MartinMoizard

+0

@MartinMoizard: изменение размера представления вызовет layoutSubviews в его супервизии –

+0

@MartinMoizard: проверьте мой обновленный ответ –

0

viewDidLayoutSubviews будет вызываться, когда

Когда изменение оценки за вид на контроллере вида, вид регулирует положение его подвидов, а затем система вызывает этот метод .

Например, вы установили constraints вашего зрения, то вы хотите обновить рамку для вашего подвид в viewDidLoad(), который не будет делать какие-либо последствия, как в viewDidLoad() ваш constraints не правильно установлены, они будут правильно установлены, когда viewDidLayoutSubviews вызывается, теперь вы хотите обновить фреймы вашего подвью, тогда вы можете сделать это в этом методе, поскольку этот метод вызывается только после того, как все ограничения вашего представления правильно установлены.

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