controlador de vista raíz de mi aplicación es compatible con cualquier orientación pero el usuario puede navegar a otro controlador de vista de que sólo es compatible con la orientación horizontal.iPhone altura de la barra de navegación sigue siendo corto en orientación vertical
El problema básico es que, independientemente de la orientación física del dispositivo, cuando el usuario hace estallar de nuevo a controlador de vista raíz, la barra de navegación tiene una altura que sería apropiado para el modo horizontal. Me gustaría descubrir cómo hacer que aparezca la barra de navegación con una altura de 44 (altura del retrato) en lugar de 32 (altura del paisaje).
Aunque la barra de navegación no está ajustado a la altura apropiada, UITableView del controlador de vista raíz está desplazado correctamente (44 píxeles desde la parte superior de la pantalla).
Dentro -viewWillAppear el segundo de controlador de vista: puedo realizar convierte el criterio de rotación:
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];
}
Debido a que este controlador de vista secundaria permite la navegación a los controladores de vista subordinadas (así como hacer estallar una copia de seguridad de controlador de vista raíz), he añadido a la siguiente -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];
}
Gracias por cualquier consejo sobre cómo forzar un nuevo cálculo de altura de la barra de navegación.
Gracias perfecta, la única manera de que pudiera conseguir que funcione de nuevo en iOS6 – AlexWien
¿Qué hay de ios10? Me he enfrentado a este problema y la solución no está funcionando. – Slavcho
@Slavcho. Lo siento. No tengo una respuesta. No he estado trabajando en iOS desde hace un tiempo. – westsider