высота панели навигации 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];
   }

Спасибо за любой совет относительно того, как вызвать перерасчет высоты панели навигации.

5
задан westsider 27 July 2010 в 00:03
поделиться