Прогнозирование фреймов элементов пользовательского интерфейса в -shouldAutorotateToInterfaceOrientation: - PullRequest
6 голосов
/ 05 мая 2011

Можно ли запросить (программно, во время выполнения), какая высота / толщина панели навигации и / или панели инструментов будет после поворота?

То есть при построении фрейма для определенного подпредставления я хочу установить его фрейм относительно доступного пространства между панелью навигации и панелью инструментов. Чтобы сделать это гладким, лучше сделать это в shouldAutorotateToInterfaceOrientation:, а не didRotateFromInterfaceOrientation:, но такие значения, как self.navigationController.toolbar.frame.size.height, различаются для ориентаций устройств и .

Я хотел бы рассчитать мой новый кадр подвида, исходя из толщины панели инструментов , равной , и я бы хотел сделать это без жестких значений, таких как 32pt, 44pt и т. Д.

Есть мысли?

Ответы [ 2 ]

1 голос
/ 12 октября 2011

Вы должны сделать все свои изменения размера кадра в willAnimateRotationToInterfaceOrientation:duration:

AFAIK, нет никакого способа предсказать размер ваших UIViews, пока вы не достигнете didRotateFromInterfaceOrientation:

Один из способов может быть сделатьвсе размеры кадров в вашем коде, включая панель инструментов.Таким образом, вы полностью контролируете размер элементов вашего интерфейса.

1 голос
/ 20 августа 2011

Вы можете изменить свою рамку вида методом willAnimateRotationToInterfaceOrientation:duration:.

- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration {
    [super willAnimateRotationToInterfaceOrientation:toInterfaceOrientation duration:duration];

    NSLog(@"%@", NSStringFromCGRect(self.navigationController.navigationBar.frame));
}

Для получения дополнительной информации ознакомьтесь с документацией, предоставленной Apple.

...