2016-04-09 2 views
0

У меня есть два контроллера вида (ViewController1 и ViewController2), в которых ViewController1 имеет модальный переход к ViewController2, а ViewController2 можно отбросить обратно в ViewController1.viewWillAppear не обновил ротацию после модального отклонения

Если я выполните следующие действия:

ViewController1 поворота ландшафтной покадрово к VC2-ViewController2 вращаются к портрету-уволить VC1

Затем в ViewController1-х viewWillAppear я печатаю view.frame.size и я получаю это (работает на симуляторе iPhone 6s):

(667.0, 375.0) 

Таким образом, это означает, что e ширина больше, чем высота, или что она все еще находится в ландшафте.

Это говорит мне, что ViewController1 еще не повернут, что имеет смысл, так как это находится в viewWillAppear.

Мои текущие параметры (которые я знаю):

  1. Использование viewDidAppear - не является предпочтительным, так как я перегрузочные вид коллекции здесь и изменения будут заметны.

  2. Создать размотку segue - не рекомендуется, так как для этого требуются раскадровки.

Итак, какие у меня другие варианты? Есть ли метод контроллера представления, который наилучшим образом соответствует моим потребностям?

+0

Так что это не так, что все, что можно сделать с помощью раскадровки можно сделать программно? У меня создалось впечатление, что все может быть сделано программно. – BallpointBen

ответ

1

Вы правы: во время просмотра ViewViewView ViewController1 еще не находится в иерархии окон, поэтому у него не было возможности для компоновки. В общем, если у вас есть код для работы с макетом, я могу рассмотреть возможность размещения его в viewWillLayoutSubviews или viewDidLayoutSubviews.

+0

Насколько я понимаю, 'viewDidLayoutSubviews' вызывается каждый раз, когда макет изменяется, так что нет способа получить его только один раз (без вариантов, которые я, конечно, перечислял)? – tktsubota