TL; DR: Представляется, что иерархия зрения не не отрегулирована для IPad Pro размера экрана до viewWillLayoutSubviews:
и viewDidLayoutSubviews:
вызывается. Когда это вызывается системой компоновки, это зависит от конструкции вашей иерархии представлений.
При обновлении моего приложения для iPad Pro также наблюдается подобное поведение. Поэтому я более подробно рассмотрел события жизненного цикла контроллера, чтобы увидеть, что происходит как в моем существующем проекте, так и в новом проекте.
Для совершенно нового проекта, используя контроллер вида, который имеет только панель навигации (расположенную чуть ниже строки состояния) и основной вид (который занимает оставшуюся часть пространства, при включенной автоматической компоновке, в ландшафтном режиме а-ля следующий скриншот:
Я вижу следующий вывод из консоли для жизненного цикла контроллера представления:
-[ViewController viewDidLoad] self.navigationBar: .frame: {{0, 20}, {1024, 44}}; .bounds: {{0, 0}, {1024, 44}}
-[ViewController viewDidLoad] self.primaryView: .frame: {{0, 64}, {1024, 704}}; .bounds: {{0, 0}, {1024, 704}}
-[ViewController viewWillAppear:] self.navigationBar: .frame: {{0, 20}, {1024, 44}}; .bounds: {{0, 0}, {1024, 44}}
-[ViewController viewWillAppear:] self.primaryView: .frame: {{0, 64}, {1024, 704}}; .bounds: {{0, 0}, {1024, 704}}
-[ViewController viewWillLayoutSubviews] self.navigationBar: .frame: {{0, 20}, {1024, 44}}; .bounds: {{0, 0}, {1024, 44}}
-[ViewController viewWillLayoutSubviews] self.primaryView: .frame: {{0, 64}, {1024, 704}}; .bounds: {{0, 0}, {1024, 704}}
-[ViewController viewDidLayoutSubviews] self.navigationBar: .frame: {{0, 20}, {1366, 44}}; .bounds: {{0, 0}, {1366, 44}}
-[ViewController viewDidLayoutSubviews] self.primaryView: .frame: {{0, 64}, {1366, 960}}; .bounds: {{0, 0}, {1366, 960}}
-[ViewController viewDidAppear:] self.navigationBar: .frame: {{0, 20}, {1366, 44}}; .bounds: {{0, 0}, {1366, 44}}
-[ViewController viewDidAppear:] self.primaryView: .frame: {{0, 64}, {1366, 960}}; .bounds: {{0, 0}, {1366, 960}}
из того, что я могу видеть здесь, вид начинается с wi dth из 1024 точек, но после выполнения 'viewDidLayoutSubviews', соответствующий размер был определен (1366 пунктов).
В моем собственном проекте для одного экрана, который использует контроллер разделенного вида, я могу видеть подобное поведение:
-[XYZViewController viewDidLoad] self.navigationBar: .frame: {{0, 20}, {1024, 44}}; .bounds: {{0, 0}, {1024, 44}}
-[XYZViewController viewWillLayoutSubviews] self.navigationBar: .frame: {{0, 20}, {1024, 44}}; .bounds: {{0, 0}, {1024, 44}}
-[XYZViewController viewDidLayoutSubviews] self.navigationBar: .frame: {{0, 0}, {1366, 44}}; .bounds: {{0, 0}, {1366, 44}}
-[XYZViewController viewWillLayoutSubviews] self.navigationBar: .frame: {{0, 0}, {1366, 44}}; .bounds: {{0, 0}, {1366, 44}}
-[XYZViewController viewDidLayoutSubviews] self.navigationBar: .frame: {{0, 0}, {1366, 44}}; .bounds: {{0, 0}, {1366, 44}}
-[XYZViewController viewWillAppear:] self.navigationBar: .frame: {{0, 0}, {1366, 44}}; .bounds: {{0, 0}, {1366, 44}}
-[XYZViewController viewWillLayoutSubviews] self.navigationBar: .frame: {{0, 0}, {1366, 44}}; .bounds: {{0, 0}, {1366, 44}}
-[XYZViewController viewDidLayoutSubviews] self.navigationBar: .frame: {{0, 20}, {1366, 44}}; .bounds: {{0, 0}, {1366, 44}}
-[XYZViewController viewWillLayoutSubviews] self.navigationBar: .frame: {{0, 20}, {1366, 44}}; .bounds: {{0, 0}, {1366, 44}}
-[XYZViewController viewDidLayoutSubviews] self.navigationBar: .frame: {{0, 20}, {1366, 44}}; .bounds: {{0, 0}, {1366, 44}}
-[XYZViewController viewDidAppear:] self.navigationBar: .frame: {{0, 20}, {1366, 44}}; .bounds: {{0, 0}, {1366, 44}}
В этом случае, так как иерархия вида отличается, viewWillLayoutSubviews:
вызывается ранее в просматривать жизненный цикл контроллера и правильный размер уже был определен к моменту, когда вызывается viewWillAppear:
. Но, как вы можете видеть, это действительно зависит от вашей иерархии представлений - поэтому я бы рекомендовал вам подтвердить вашу иерархию представлений, а затем определить наилучшее местоположение для добавления вашего кода, зависящего от разрешения.
Есть ли новости по этому вопросу? У меня та же проблема. Независимо от того, что я делаю, я постоянно получаю 1024 * 768 в симуляторе iPad Pro. –
@GergelyKovacs пока я не знаю, как заставить его работать. Я собираюсь вернуться к этой проблеме на следующей неделе. Я опишу результаты, если найду что-нибудь интересное. –
@AlexanderBalabanov - Можете ли вы предоставить дополнительную информацию о проблеме, которую вы испытываете, чтобы мы могли помочь? Я также искал поддержку iPad Pro и хотел бы убедиться, что мы все можем поддержать его соответствующим образом. Где вы запускаете инструкцию NSLog для просмотра границ представления? Вы используете автоматическую компоновку? Если вы можете предоставить нам еще какой-то контекст того, что вы испытываете, то, надеюсь, мы сможем вместе работать, чтобы помочь решить эту проблему. –