2014-11-19 2 views
17

Я разрабатываю iOS Universal App на Swift, используя автомат и поддерживаю только портрет.Почему viewdidlayoutsubviews вызывает несколько раз?

Обнаружено, что UIViewController#viewdidlayoutsubviews называется несколько раз. Вместо этого viewDidLoad ТОЛЬКО звонит один раз при запуске MyApp UIViewController.

Почему viewdidlayoutsubviews вызывает несколько раз? Ограничения на каждый UIView (UIButtons, UITextFields и т. Д.) Будут выполняться в порядке?

Любая информация будет оценена по достоинству.

ответ

18

LoadView называется только один: когда необходимо загрузить представление.

LayoutSubviews, однако, вызывается один раз в цикле выполнения программы на любом виде, который имел setNeedsLayout или setNeedsDisplayInRect называется на нем - это включает в себя всякий раз, когда подтаблицы была добавлена ​​к виду, прокрутка, изменение размера и т.д.

См this ссылка для получения дополнительной информации. Он использует Objective-C, но информация по-прежнему сохраняется.

+0

Не могли бы вы объяснить немного больше о том, что установленоNeedsLayout & setNeedsDisplayInRect? Я не мог понять связанную страницу. –

+0

Проверьте [этот комментарий] (http://stackoverflow.com/a/13542580) за хорошее объяснение о 'setNeedsLayout' –

0

Самое лучшее, что можно сделать, и это служило мне хорошо - это попасть в привычку добавления журнала или печати заявление методов, о которых вы не уверены

Я использую это -> печать (» Hello From (NSStringFromSelector (#FUNCTION)) ")

или это, если внутри View Подкласс Swift.print (" Hello From (NSStringFromSelector (#FUNCTION)) ")

Он распечатывает метод, когда его вызывается.