Итак, моя программа для iPad имеет контроллер представления с псевдо-разделением (тот, который я реализовал, а не базовый SDK), и некоторое время назад он работал правильно. Он имеет базовый макет (UINavController для мастера, контроллер представления контента для подробностей справа), но у меня он есть, чтобы главный вид не исчезал при повороте в портретное представление.
Недавно я добавил в UITabBarController, чтобы он содержал весь разделенный вид, из-за чего панель навигации стала шаткой, в то время как все остальные представления расположены нормально. Кроме того, панель навигации неправильно позиционируется только при запуске программы, когда iPad находится в горизонтальной или перевернутой ориентации. Если все начинается в портрете, все в порядке.
Примеры изображений можно найти здесь:
http://profile.imageshack.us/user/Pzychotix
Изображение с панелью навигации вверх, когда я первоначально запускаю программу.
Изображение с навигационной панелью внизу - после поворота один или несколько раз.
Соответствующий код:
RootViewController.m:
- (void)loadView {
navController = [[NavigationBreadcrumbsController_Pad alloc] init];
ABTableViewController_Pad * tableViewController = [[ABTableViewController_Pad alloc] initWithNibName:@"ABTableView"];
master = [[UINavigationController_Pad alloc] initWithRootViewController:tableViewController];
[tableViewController release];
// Dummy blank UIViewcontroller
detail = [[UIViewController alloc] init];
detail.view = [[[UIView alloc] init] autorelease];
[detail.view setBackgroundColor:[UIColor grayColor]];
self.view = [[[UIView alloc] init] autorelease];
self.view.backgroundColor = [UIColor blackColor];
[self positionViews];
[self.view addSubview:navToolbarController.view];
[self.view addSubview:master.view];
[self.view addSubview:detail.view];
}
// Handles the respositioning of view into it's current orientation
-(void)positionViews{
CGFloat tabBarOffset = 0;
if(self.tabBarController){
tabBarOffset = self.tabBarController.tabBar.frame.size.height;
}
if(self.interfaceOrientation == UIInterfaceOrientationPortrait || self.interfaceOrientation == UIInterfaceOrientationPortraitUpsideDown) {
self.view.frame = CGRectMake(0, 0, 768, 1004);
navController.view.frame = CGRectMake(0,0,768,44);
//adjust master view
[master.view setFrame:CGRectMake(0, 44, 320, 1024 - 44 - 20 - tabBarOffset)];
//adjust detail view
[detail.view setFrame:CGRectMake(321,44, 448, 1024 - 44 - 20 - tabBarOffset)];
}
// Landscape Layout
else{
self.view.frame = CGRectMake(0, 0, 748, 1024);
navToolbarController.view.frame = CGRectMake(0,0,1024,44);
//adjust master view
[master.view setFrame:CGRectMake(0, 44, 320, 768 - 44 - 20 - tabBarOffset)];
//adjust detail view
[detail.view setFrame:CGRectMake(321,44, 1024 - 320, 768 - 44 - 20 - tabBarOffset)];
}
}