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
barra de navegación y. El tableview
está apareciendo por debajo de la barra de búsqueda
Pero cuando ejecuto esto Xcode 5 sdk iOS 7
, la barra de búsqueda no es visible (creo que está ubicada debajo de la barra de estado y la barra de navegación), y también la barra de navegación aparece sobre la vista de tabla.
¿Se solucionará con iOS 7
una versión estable?
¿O es el problema de mi codificación?
¿O deberíamos manejarlo agregando el (y = statubar height + nav bar height)
valor de y para iOS 7
?
Recientemente 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 cambian de tamaño para tener en cuenta 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 por mí 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 adicional 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 evitará que la vista se enmarque debajo de la barra de navegación y la barra de estado.
Sin embargo, no he encontrado una solución para el caso en el que 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 quede enmarcada debajo. Eso funciona, pero cuando alterno mostrar / ocultar la barra de navegación, he experimentado resultados aún más extraños. La primera subvista (a UIScrollView
) cambia sus límites y origen cada vez.
Respuestas:
Eso no es del todo cierto. Se ha introducido una nueva propiedad en iOS 7 que le permite ajustar el comportamiento del diseño como en versiones anteriores de iOS. Coloque este fragmento de código en su controlador de vista, ¡y estará listo! El espacio que ocupa su barra de navegación debe contabilizarse automáticamente
Necesita agregar lo anterior en su
-(void)viewDidLoad
método.Nota: Debería utilizar la última versión de GM de iOS 7 y Xcode 5 ahora, ya que la API ha cambiado de las versiones beta.
fuente
Si está trabajando en Storyboard (que recomiendo encarecidamente), esta es la solución: puede desactivar "Extender bordes" de su ViewController en el storyboard. Tienes que hacer esto para cada viewController. Puede desactivar los bordes extendidos haciendo clic en el icono viewController en stortyboard (además del productOwner debajo de la vista) y luego seleccionando el inspector de atributos (como se muestra en las imágenes).
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 guión gráfico en iOS 6.
Es simplemente genial: D
[Actualizar]
Tenga cuidado: deshabilitar "Extender bordes" puede resultar en 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 el botón de inicio). esto se puede solucionar estableciendo el color de fondo de la vista de la barra de navegación en blanco.
fuente
Como dice el OP, hay una solución simple para esto que es configurar la barra de navegación para que sea opaca. En lugar de hacer esto en el código, simplemente desmarque "Translúcido" para la barra de navegación raíz:
fuente
self.edgesForExtendedLayout=UIRectEdgeNone;
Funciona en el simulador de iOS 7 (Xcode 5 DP5)
fuente
if (NSFoundationVersionNumber > NSFoundationVersionNumber_iOS_6_1)
todas estas respuestas fueron útiles, especialmente las de MQoder, pero para mí también tuve que configurar la barra superior predeterminada en "navegación negra opaca".
fuente
La respuesta de @One Man Crew es correcta, pero:
Recomendaría usar este código para evitar errores al ejecutar la aplicación en versiones anteriores:
fuente
Y debe hacer esto en AppDelegate # aplicación: didFinishLaunchingWithOptions:
De lo contrario, el color de fondo de la barra de navegación cambiará a gris. Porque la barra de navegación transparente se superpone a la ventana.
fuente
Si desea mantener la transparencia cuando el usuario se desplaza por la vista de la tabla, puede configurar el contentInset de la misma:
fuente
Una solución es utilizar el controlador de navegación. Esto resuelve automáticamente el problema. También use Xcode 5 en lugar de las versiones de Xcode Preview, ya que son beta.
fuente