Прогнозирование фреймов элементов пользовательского интерфейса в -shouldAutorotateToInterfaceOrientation:
Можно ли запросить (программно, во время выполнения), какая высота / толщина панели навигации и / или панели инструментов будет после поворота?
То есть при построении фрейма для конкретного подпредставления я хочу установить его фрейм относительно доступного пространства между панелью навигации и панелью инструментов. Чтобы сделать это гладким, лучше всего сделать это в shouldAutorotateToInterfaceOrientation:
скорее, чем didRotateFromInterfaceOrientation:
, но такие значения, как self.navigationController.toolbar.frame.size.height
отличаются между ориентациями и устройствами.
Я хотел бы рассчитать мой новый кадр подпредставления в зависимости от толщины панели инструментов, и я хотел бы сделать это без таких жестких значений, как 32pt, 44pt и т. Д.
Какие-нибудь мысли?
2 ответа
Вы должны сделать все ваши изменения размера кадра в willAnimateRotationToInterfaceOrientation:duration:
AFAIK, нет никакого способа предсказать размер ваших UIViews, пока вы не достигнете didRotateFromInterfaceOrientation:
Одним из способов может быть изменение всех размеров фрейма в вашем коде, включая панель инструментов. Таким образом, вы полностью контролируете размер элементов вашего интерфейса.
Вы можете изменить рамку своего вида в willAnimateRotationToInterfaceOrientation:duration:
метод.
- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration {
[super willAnimateRotationToInterfaceOrientation:toInterfaceOrientation duration:duration];
NSLog(@"%@", NSStringFromCGRect(self.navigationController.navigationBar.frame));
}
Для получения дополнительной информации ознакомьтесь с документацией, предоставленной Apple.