Я работаю над приложением для iPad, которое использует UISplitViewController
в качестве rootViewController
для моего окна.Контроллер подробного представления для разделенного вида представляет собой UINavigationViewController
, который содержит UITableViewController
.И контроллер разделенного вида, и контроллер навигационного представления создаются программно и не используют кончик.Контроллер табличного представления - это пользовательский класс, который расширяет UITableViewController
обычными методами делегирования табличного представления.
Когда приложение работает в портретном режиме, я могу нажать кнопку, чтобы отобразить всплывающее окно и представление навигации, ив всплывающем окне вид таблицы отображается нормально:
Однако при первом повороте в горизонтальный и разделенный вид вид навигации и вид таблицы слева отображаются,Панель инструментов навигационного представления перекрывает первую строку табличного представления:
Вы можете видеть, что табличное представление скрыто и строка, содержащая "elephant", не видна.Странно то, что если я поверну устройство обратно в портретную, а затем снова в альбомную ориентацию, представление таблицы больше не будет затемнено:
Что мне нужно для этого сделатьчто табличное представление отображается правильно при первом повороте устройства в альбомную ориентацию?
Редактировать:
UISplitViewController
создается в application:didFinishLaunchingWithOptions:
и его viewControllers
свойство установлено в массив, содержащий my UINavigationController
(главный контроллер на языке разделенного представления) с индексом 0 и контроллер UIWebView
с индексом 1.
UINavigationController
создается с помощью[[UINavigationController alloc] initWithRootViewController:tableViewController]
.Экземпляр tableViewController
является подклассом UITableViewController
.В частности, вот объявление интерфейса:
@interface LocalRevisionsList :
UITableViewController <NSFetchedResultsControllerDelegate> {}
TableViewController инициализируется следующим образом:
tableViewController =
[[LocalRevisionList alloc] initWithNibName:@"LocalRevisionList" bundle:nil];
Если это полезно, я могу предоставить информацию из .xib.Однако даже когда я инициализирую табличное представление без xib (tableViewController = [[LocalRevisionList alloc] init]
), я все еще вижу проблему с отображением в первый раз.Единственные переопределенные операции в LocalRevisionList
- это viewDidLoad
.Вот это полностью (просто чтобы показать, что мы здесь ничего не делаем):
- (void)viewDidLoad
{
[super viewDidLoad];
self.title = @"My Title";
NSError *error;
if (![[self fetchedResultsController] performFetch:&error])
{
abort();
}
}
Edit 2:
Я не создавал этот проект, используяшаблонный проект Split View, но я имел в виду, что пытался найти разницу между тем, что я делаю, и тем, что делает этот проект.Единственное различие, которое я обнаружил, состоит в том, что проект шаблона устанавливает разделенное представление и его дочерние контроллеры представления внутри .xib, тогда как большинство моих контроллеров я создаю программно.
Когда я разбиваюсь внутри shouldAutorotateToInterfaceOrientation:
ивыгрузите фрейм контроллера корневого представления, я вижу:
(gdb) print (CGRect)[[self view] frame]
$2 = {
origin = {
x = 0,
y = 0
},
size = {
width = 768,
height = 1004
}
}
Распечатывая фрейм моего контроллера навигации, который является первым контроллером в моем массиве разделения представления, я вижу это:
(gdb) print (CGRect)[[[self localArticlesNavController] view] frame]
$3 = {
origin = {
x = -320,
y = 0
},
size = {
width = 320,
height = 1004
}
}
Отрицательное значение x интересно, но я не думаю, что оно вызывает у меня проблему.Даже когда я поворачиваюсь назад в портретную, а затем снова в альбомную ориентацию, эти значения кадра остаются такими же, как в первый раз (когда вид отображается неправильно).