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 de que está funcionando correctamente. La barra de búsqueda que aparece debajo de la statusbar y la barra de navegación. El tableview es que aparece debajo de la barra de búsqueda

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

Se fija con iOS 7 versión estable ?

O es el problema de mi codificación ?

O vamos a manejar mediante la adición de la y (y = statubar height + nav bar height) valor para iOS 7 ?

Recientemente he descargado Xcode 5 DP para probar mis aplicaciones en iOS 7. La primera cosa que me di cuenta y confirmado es que mi punto de vista los límites no siempre cambia de tamaño para dar cuenta de la barra de estado y la barra de navegación.

En viewDidLayoutSubviews, puedo imprimir la vista de los límites:

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

Este resultado en mi contenido que aparece debajo de la barra de navegación y la barra de estado.

Sé que podría dar cuenta de la altura a mí mismo por llegar a la pantalla principal de la altura, restando el estado de la altura de la barra y la barra de navegación de altura, pero que parece innecesario de trabajo extra.

Ha alguien más experimentado este problema?

ACTUALIZACIÓN:

He encontrado una solución para este problema específico. Conjunto de la barra de navegación traslúcido de propiedad NO:

self.navigationController.navigationBar.translucent = NO;

Esto solucione el punto de vista de ser enmarcado debajo de la barra de navegación y la barra de estado.

Sin embargo, no he encontrado una solución para el caso cuando se desea que la barra de navegación para ser translúcido. Por ejemplo, la visualización de una foto a pantalla completa, me gustaría que la barra de navegación transparente, y la vista para ser enmarcado por debajo de ella. Que funciona, pero cuando me alternar mostrar/ocultar la barra de navegación, he experimentado aún más extraño resultados. La primera subvista (un UIScrollView) obtiene sus límites origen y cambia cada vez.

  • La versión Beta del software. Foros de desarrolladores Apple son los más apropiados. También, el problema está explícitamente mencionado en la guía de transición.
  • Esta pregunta me fue muy útil. Técnicamente, si todos leemos todos el lanzamiento de google docs y guías, no necesitamos ESO.
InformationsquelleAutor | 2013-08-07

9 Comentarios

  1. 188

    Que no es completamente cierto. Ha habido una nueva propiedad introducida en iOS 7 que permite ajustar el comportamiento de diseño como en las versiones anteriores de iOS. Colocar este fragmento de código en su controlador de vista, y usted debe ser bueno para ir! El espacio de la barra de navegación toma deben ser tomados en cuenta automáticamente

     if ([self respondsToSelector:@selector(edgesForExtendedLayout)])
        self.edgesForExtendedLayout = UIRectEdgeNone;

    Usted necesita agregar el sobre en su -(void)viewDidLoad método.

    Nota: Usted debe estar utilizando la última GM lanzamiento de iOS 7 y Xcode 5 ahora bien, debido a que la API ha cambiado de versiones beta.

    • en Mi código dice edgesForExtendedLayout. Uso de identificador no declarado UIExtendedEdgeNone. Por favor, ayudar.
    • ¿qué versión de iOS?
    • Xcode5 beta4 iOS7
    • Lo que ha cambiado para UIRectEdgeNone
    • Esa es exactamente la razón por qué esa pregunta no debería ser preguntado o contestadas aquí.
    • Yo no entienda por qué si quieren mantener la compatibilidad con ios6 se ve obligado a introducir un condicional caso por el código para comprobar si el controlador tiene esa propiedad o no..
    • si no marca, u terminará con una excepción
    • Esto ya no funciona en iOS 6 DP6+
    • Lea la pregunta , es para iOS de iOS7
    • Parece ser que esto solo funciona si la vista incrustada en un UINavigationController.
    • ¿Sólo funciona si la aplicación utiliza UINavigationController?
    • Yah, que vi en esta respuesta que edgesForExtendedLayout sólo funciona cuando se trata de un Contenedor de Controlador de Vista.
    • está funcionando muy bien. porque a veces mi posición del objeto se va onether posición . cuando ı añadir a viewdidload , se resuelve
    • sí su trabajo bien para mí. pero mi app tienen Tabbacontroller alos. Resto de la viewcontroller está trabajando bien. Problema en Tabbar controlador de vista. supongamos que tengo 5 tab. 1. cuando hago clic en la pestaña de pantalla de Lista abierta) que funcione bien cuando hago clic en la lista de detalle de abrir bien. hasta bien su trabajo fino 2. cuando hago clic en la ficha 2 (otra lista) abierto. ese momento, cuando yo clickon tab1 de pantalla detalle de la vista principal marco de disminuir a 64px. he intentado con fuerza aumento pero no funciona .. ¿qué puedo hacer en este caso ??
    • ¿Y si la vista no está incrustado en un UINavigationController,y el storyboard o xib etc no se usan, entonces ¿cuál es la solución?
    • ¿El cambio de la barra de título para no ser translúcido afectan a este comportamiento?
    • Me salvó a mí, muchísimas gracias.

  2. 37

    Barra de navegación aparecen sobre los puntos de vista con el nuevo iOS7 SDK

    Si usted está trabajando en el Guión (que recomiendo encarecidamente!) esta es la solución:
    Puede deshabilitar «Extender los Bordes» de su ViewController en el guión gráfico. Usted tiene que hacer esto para cada viewController. Puede deshabilitar los bordes extendidos haciendo clic en el viewController icono en stortyboard (además de la productOwner debajo de la vista en sí) y, a continuación, seleccionar los atributos del inspector (Como las imágenes de muestra).

    Esto define también la alineación de las líneas como iOS 6.

    Otra gran herramienta en xCode 5 es «vista previa»: haga clic en el mayordomo Botón (asistente de editor) y seleccione vista previa. allí usted puede seleccionar iOS 6 y ver cómo su guión gráfico diseño se verá como en iOS 6.

    Su genial:D

    [Actualización]

    Tener cuidado: la desactivación de «Extender los Bordes», podría resultar en un resplandor negro en la barra de navegación cuando la aplicación entra a fondo en iOS7. el brillo también será visible en la vista de multitarea (pulse dos veces sobre el botón home). esto puede ser resuelto mediante el ajuste del color de fondo de la navegación de la barra de ver a blanca.

    [self.navigationController.view setBackgroundColor:[UIColor whiteColor]];
    • Estás muy por delante de nosotros. Todavía estamos en Xcode 5
    • Sí, esta es la solución que viene a partir de un guión perspectiva. Gracias.
    • +1 por mencionar el extraño brillo problema.
  3. 12

    Como el OP dice que no hay una solución simple a este que es para configurar la barra de navegación para ser opaco. En lugar de hacer esto en el código, simplemente desmarca la casilla «Translúcido» para su raíz barra de navegación:

    Barra de navegación aparecen sobre los puntos de vista con el nuevo iOS7 SDK

    • Muchas gracias de las Ofertas…..
  4. 8

    self.edgesForExtendedLayout=UIRectEdgeNone;

    Funciona en iOS 7 simulador(Xcode 5 DP5)

    • esto funciona bien en el ios7 pero cuando me encontré con la app en ios 6 y versiones anteriores de nuevo las opiniones se mueven hacia arriba. Alguna solución para esto?. También necesitamos establecer esta propiedad en cada controlador de vista de viewdid método de carga?
    • siempre se puede comprobar si el actual iOS 7 con este si: if (NSFoundationVersionNumber > NSFoundationVersionNumber_iOS_6_1)
    • no trabajo …….
  5. 2

    estas respuestas fueron todas útil, especialmente MQoder, pero para mí también tuve para establecer el valor predeterminado de la barra superior para «negro opaco de navegación».

    Barra de navegación aparecen sobre los puntos de vista con el nuevo iOS7 SDK

    • Esto no funciona para mí.
  6. 1

    @Un Hombre de la Tripulación de la respuesta es correcta, pero:

    Yo recomendaría usar este código para evitar errores cuando se ejecuta la aplicación en versiones anteriores :

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

    auto.edgesForExtendedLayout = UIRectEdgeNone;

    Y usted debe hacer esto en el AppDelegate#aplicación:didFinishLaunchingWithOptions:

    auto.de la ventana.backgroundColor = [UIColor whiteColor];

    De lo contrario, la Barra de Navegación del color de fondo cambia a gris. Debido a la transparencia de la Barra de Navegación se superpone a la ventana.

  8. 0

    Si quieres mantener la transparencia cuando el usuario se desplaza por su vista de tabla, puede establecer la contentInset de ella:

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

    Una solución es utilizar la Navegación Controlador. Esto resuelve automáticamente el problema.
    También el uso de Xcode 5, en lugar de Xcode versiones de vista previa, ya que son beta queridos.

Dejar respuesta

Please enter your comment!
Please enter your name here