Я разрабатываю приложение для iPad (iOS 4), включающее UISplitViewController
.Главная особенность моего большого (правого) контроллера вида в контроллере разделения - UITableView
.Я установил в моем табличном представлении автоматическое изменение ширины и высоты:
_tableView.autoresizingMask = UIViewAutoresizingFlexibleHeight
| UIViewAutoresizingFlexibleWidth;
Это означает, что, когда я поворачиваюсь и контроллер раздельного просмотра входит в игру, VC и табличное представление изменяют размеры соответственно и индикатор прокруткиостается видимымНо когда я запускаю приложение в альбомной ориентации, размеры не изменяются, поэтому полосы прокрутки не видны.
Вот код журнала в моих методах UISplitViewControllerDelegate
и его результаты.Если вы хотите получить сводку, перейдите к нижней части.
- (void)splitViewController:(UISplitViewController*)svc willHideViewController:(UIViewController *)aViewController withBarButtonItem:(UIBarButtonItem*)barButtonItem forPopoverController:(UIPopoverController*)pc
{
NSLog(@"Table frame: %@", NSStringFromCGRect(_tableView.frame));
NSLog(@"Self frame: %@", NSStringFromCGRect(self.view.frame));
}
- (void)splitViewController:(UISplitViewController*)svc willShowViewController:(UIViewController *)aViewController invalidatingBarButtonItem:(UIBarButtonItem *)button
{
NSLog(@"Table frame: %@", NSStringFromCGRect(_tableView.frame));
NSLog(@"Self frame: %@", NSStringFromCGRect(self.view.frame));
}
Запуск приложения в альбомной ориентации приводит к этому ( Приложение A ):
Рамка таблицы: {{0, 223}, {768, 781}}
Самофрейм: {{0, 20}, {768, 1004}}
Затем, когда я поворачиваюсь (вне ландшафта) Я получаю это ( Приложение B ):
Каркас таблицы: {{0, 223}, {768, 781}}
Selfframe: {{321, 0}, {703, 748}}
Начиная с портретной ориентации и затем поворачивая в альбомную ориентацию, я получаю следующее ( Приложение C ):
Каркас таблицы: {{0, 223}, {768, 781}}
Самофрейм: {{0, 0}, {768, 1004}}
Затем поверните обратно в портрет ( Приложение D ):
Каркас таблицы: {{0, 223}, {703, 525}}
Selfframe: {{321, 0}, {703, 748}}
Мне кажется, что:
- A и C должны быть одинаковыми, поскольку они 'оба по существу вращаются вне портрета.И они одинаковы, так что все хорошо.
- B и D должны быть одинаковыми, так как они, по сути, вращаются вне ландшафта.Но это не так.Похоже, что автоматическое изменение размера здесь не работает.
Кажется, что ширина таблицы должна быть 703 в альбомной и 768 в портретной.Я попытался поместить код изменения размера, чтобы установить это в viewDidLoad, viewWillAppear, viewDidAppear, оба эти метода и т. Д., И, похоже, ничего не работает.Каков здесь нормальный подход?
ОБНОВЛЕНИЕ 15/06/2011: я решил эту проблему, полностью отключив автоматическое изменение размера и просто установив кадры самостоятельно в двух вышеупомянутых функциях, но мне все еще интересно, есть лиОбычная практика для решения этой проблемы.