Прогнозирование фреймов элементов пользовательского интерфейса в -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.

Другие вопросы по тегам