Корневой контроллер представления моего приложения поддерживает любую ориентацию, но пользователь может перейти к другому контроллеру представления, который поддерживает только альбомную ориентацию.
Основная проблема состоит в том, что независимо от фактической физической ориентации устройства, когда пользователь появляется назад для укоренения контроллера представления, панель навигации имеет высоту, которая подходила бы для альбомного режима. Я хотел бы выяснить, как заставить панель навигации появляться с высотой 44 (высота портрета) вместо 32 (альбомная высота).
Хотя панель навигации не установлена на надлежащую высоту, корневой контроллер представления, UITableView смещается правильно (44 пикселя от вершины экрана).
Во втором-viewWillAppear контроллера представления: Я выполняю стандартное вращательное преобразование:
if (deviceOrientation == UIDeviceOrientationPortrait)
{
UIScreen *screen = [UIScreen mainScreen];
CGFloat screenWidth = screen.bounds.size.width;
CGFloat screenHeight = screen.bounds.size.height;
UIView *navView = [[self navigationController] view];
navView.bounds = CGRectMake(0, 0, screenHeight, screenWidth);
navView.transform = CGAffineTransformIdentity;
navView.transform = CGAffineTransformMakeRotation(degreesToRadians(90));
navView.center = CGPointMake(screenWidth/2.0, screenHeight/2.0);
[[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationLandscapeRight];
}
Поскольку этот вторичный контроллер представления позволяет навигации подчинять контроллеры представления (а также раскрывающийся назад для укоренения контроллер представления), я добавил следующее к-viewWillDisappear:
if (deviceOrientation == UIDeviceOrientationPortrait)
{
UIScreen *screen = [UIScreen mainScreen];
CGFloat screenWidth = screen.bounds.size.width;
CGFloat screenHeight = screen.bounds.size.height;
UIView *navView = [[self navigationController] view];
navView.bounds = CGRectMake(0, 0, screenWidth, screenHeight);
navView.transform = CGAffineTransformIdentity;
navView.center = CGPointMake(screenWidth/2.0, screenHeight/2.0);
[[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationPortrait];
}
Спасибо за любой совет относительно того, как вызвать перерасчет высоты панели навигации.