Контроллер корневого представления моего приложения поддерживает любую ориентацию, но пользователь может перейти к другому контроллеру представления, который поддерживает только ландшафтную ориентацию.Высота панели навигации iPhone остается короткой в портретной ориентации
Основная проблема заключается в том, что независимо от фактической физической ориентации устройства, когда пользователь возвращается к контроллеру корневого представления, панель навигации имеет высоту, которая подходит для ландшафтного режима. Я хотел бы выяснить, как заставить навигационную панель появляться с высотой 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];
}
Спасибо за любые советы о том, как заставить пересчитать высоту панели навигации.
Спасибо, отлично, единственный способ заставить его снова работать в ios6 – AlexWien
Как насчет ios10? Я столкнулся с этой проблемой, и решение не работает. – Slavcho
@Slavcho. Сожалею. У меня нет ответа. Я не работаю над iOS уже некоторое время. – westsider