Контроллер корневого представления моего приложения поддерживает любую ориентацию, но пользователь может перейти к другому контроллеру представления, который поддерживает только альбомную ориентацию.
Основная проблема заключается в том, что независимо от фактической физической ориентации устройства, когда пользователь возвращается к контроллеру корневого представления, панель навигации имеет высоту, подходящую для ландшафтного режима.Я хотел бы выяснить, как заставить панель навигации отображаться с высотой 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];
}
Спасибо за любой совет о том, как принудительно пересчитать высоту панели навигации.