[iphone] La barra de navegación aparece sobre las vistas con el nuevo iOS7 SDK


Answers

Si está trabajando en Storyboard (¡lo recomiendo encarecidamente!) Esta es la solución: puede desactivar "Extender bordes" de su ViewController en el guión gráfico. Tienes que hacer esto para cada viewController. Puede desactivar bordes extendidos haciendo clic en el icono viewController en Stortyboard (además del propietario del producto debajo de la vista) y luego seleccionando el inspector de atributos (como muestra la imagen).

Esto también establecerá las líneas de alineación como iOS 6.

Otra gran herramienta en xCode 5 es "Vista previa": haga clic en el botón mayordomo (editor asistente) y seleccione Vista previa. allí puede seleccionar iOS 6 y ver cómo se verá el diseño de su storyboard en iOS 6.

Es simplemente genial: D

[Actualizar]

Tenga cuidado: la desactivación de "Extender bordes" puede dar como resultado un brillo negro en la barra de navegación cuando la aplicación ingresa en segundo plano en iOS7. el brillo también será visible en la vista multitarea (presione dos veces en el botón de inicio). esto se puede resolver estableciendo el color de fondo de la vista de la barra de navegación en blanco.

[self.navigationController.view setBackgroundColor:[UIColor whiteColor]];
Question
CGRect cgRect1 = [[UIScreen mainScreen] applicationFrame];


UISearchBar  *mySearchBar = [[UISearchBar alloc] 
               initWithFrame:CGRectMake(0, 0, cgRect.size.width, 40)];

mySearchBar.autoresizingMask = 
              UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight ;


UITableView  *myTableView = [[UITableView alloc] 
     initWithFrame:CGRectMake(0, 40, cgRect.size.width, cgRect.size.height-40)];

myTableView.autoresizingMask = 
               UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight;


[self.view addSubview:mySearchBar];
[self.view addSubview:myTableView];

En las versiones anteriores, funciona correctamente. La barra de búsqueda aparece debajo de la statusbar y la statusbar navegación. La vista de tableview aparece debajo de la barra de búsqueda

Pero cuando ejecuto esto en Xcode 5 sdk iOS 7 , la barra de búsqueda no está visible (creo que está ubicada debajo de la barra de estado y la barra de navegación), y también aparece la barra de navegación sobre la vista de tabla.

¿Se solucionará con la versión estable iOS 7 ?

¿O es el problema de mi codificación?

¿O deberíamos manejarlo agregando el valor de y (y = statubar height + nav bar height) para iOS 7 ?

Hace poco descargué Xcode 5 DP para probar mis aplicaciones en iOS 7. Lo primero que noté y confirmé es que los límites de mi vista no siempre se ajustan a la cuenta para la barra de estado y la barra de navegación.

En viewDidLayoutSubviews, imprimo los límites de la vista:

{{0, 0}, {320, 568}}

Esto hace que mi contenido aparezca debajo de la barra de navegación y la barra de estado.

Sé que podría explicar la altura yo mismo obteniendo la altura de la pantalla principal, restando la altura de la barra de estado y la altura de la barra de navegación, pero eso parece un trabajo extra innecesario.

¿Alguien más ha tenido este problema?

ACTUALIZAR:

Encontré una solución para este problema específico. Establezca la propiedad translúcida de la barra de navegación en NO:

self.navigationController.navigationBar.translucent = NO;

Esto arreglará la vista al enmarcarse debajo de la barra de navegación y la barra de estado.

Sin embargo, no encontré una solución para el caso cuando desea que la barra de navegación sea translúcida. Por ejemplo, al ver una foto en pantalla completa, deseo que la barra de navegación sea translúcida y que la vista se enmarque debajo de ella. Eso funciona, pero cuando alterno mostrando u ocultando la barra de navegación, he experimentado resultados aún más extraños. La primera subvista (un UIScrollView ) obtiene sus límites y su origen cambia cada vez.




Si desea mantener la transparencia cuando el usuario desplaza su vista de tabla, puede configurar el contentInset de la misma:

CGFloat topLayoutGuide = self.topLayoutGuide.length + self.tabBarController.navigationController.navigationBar.frame.size.height;
self.tableView.contentInset = UIEdgeInsetsMake(topLayoutGuide, 0, 0, 0);



self.edgesForExtendedLayout=UIRectEdgeNone;

Funciona en el simulador de iOS 7 (Xcode 5 DP5)




La respuesta de @One Man Crew es correcta, pero:

Recomendaría utilizar este código para evitar errores al ejecutar la aplicación en versiones anteriores:

 #if __IPHONE_OS_VERSION_MAX_ALLOWED > __IPHONE_6_1
     if ([self respondsToSelector:@selector(edgesForExtendedLayout)])
        self.edgesForExtendedLayout = UIRectEdgeNone;
 #endif



Related