Cómo prevenir UINavigationBar de cubrir la parte superior de la vista en iOS 7?

Después de actualizar a Xcode 5, las barras de navegación en todas mis app opiniones se han desplazado hacia abajo. Aquí hay algunas capturas de pantalla, la primera muestra todo en la vista como es tirado hacia abajo, y la segunda muestra todos intacta. La barra de búsqueda debe comenzar allí donde la barra de navegación.

Cómo prevenir UINavigationBar de cubrir la parte superior de la vista en iOS 7?
Cómo prevenir UINavigationBar de cubrir la parte superior de la vista en iOS 7?

Alguien sabe cómo puedo solucionar este problema?

edit: he intentado previamente recomendación:

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

Pero el resultado es muy extraño resultados.

Cómo prevenir UINavigationBar de cubrir la parte superior de la vista en iOS 7?

Esto puede ser debido a que tengo una «diapositiva » menú» bajo este punto de vista controlador que aparece debido a la transparencia de la barra de navegación.

InformationsquelleAutor Sam D20 | 2013-09-23

11 Kommentare

  1. 232

    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.

    Si usted tiene para mostrar y ocultar la barra de navegación, a continuación, utilizar

     if ([self respondsToSelector:@selector(edgesForExtendedLayout)])
        self.edgesForExtendedLayout = UIRectEdgeNone;   //iOS 7 specific

    en su viewDidLoad método.

    • He puesto esta bajo viewDidLoad sin embargo no produce ningún cambio.
    • lo hacen en viewDidLayoutSubviews funciones
    • Añadiendo esto a viewDidLayoutSubviews hizo el truco. Agradezco la ayuda señores!
    • Hola, ¿Alguna Pregunta? o se complementan?
    • He implementado lo que e dicho pero sigo teniendo el mismo problema
    • se utiliza en la navegación o controlador de vista del modelo? Por favor enviar el código….
    • no funciona… yo poner todo el código en viewDidLoad…
    • trate de en -(void) viewWillLayoutSubviews método
    • Para una visión detallada de leer iOS 7 interfaz de usuario Guía de Transición. Capítulo: la Apariencia y el Comportamiento. [1]:
    • Trabajó como un encanto para mí en el AppDelegate didFinishLaunchingWithOptions. GRACIAS Deepesh. Upvote.
    • EdgesForExtendedlayout trabajado para mí
    • En xcode5, puede configurar la Barra de Navegación para no ser Translúcido en virtud de los Atributos del Inspector.
    • auto.edgesForExtendedLayout = UIRectEdgeNone; me ayudó
    • a mí me funciona, IOS 11 muchas gracias

  2. 31

    En iOS 7 por defecto todos Controlador translúcido valor de la propiedad es SÍ, por lo que se establece translúcido propiedad NO para este problema.

    self.navController.navigationBar.translucent = NO;
    • No hay ningún «navController» de la propiedad. El uso de este auto.navigationController.navigationBar.translúcido = NO;
    • creo navigtionbarcontroller objeto en aplicación de delegar y dar nombre navController.
  3. 12

    Esto funciona para swift, así como en iOS 8.1

    navigationController?.navigationBar.translucent = false
    • Por qué -1 cuando esto funciona para swift recomendado?
    • Esto hizo que el truco para mí. Gracias
  4. 8

    Si quieres mantener la transparencia en su navigationBar, al final de su viewDidLoad o en su viewWillAppear añadir esta línea de código:

    [self.view sendSubviewToBack:self.tableView]

    De alguna manera si su scrollView subclase (UITableView, UICollectionView, etc.) es en index 0 en la vista actual subviews, automáticamente ajustar los márgenes de acuerdo a su navigationBar. Y no debería afectar a su interfaz de usuario en las versiones anteriores a iOS7 bien.


    EDITAR
    Si inicializa su UITableView mediante programación, es mejor agregarlo a la vista el uso de este [self.view insertSubview:self.tableView atIndex:0];

    • Esta debe ser la respuesta correcta. Si desea agregar la subvista mediante programación se puede hacer [self.view insertSubview:self.tableView atIndex:0]; en lugar de enviarlo a la parte de atrás después de agregarlo.
    • Correcto. Pero sin saber cómo se ha de iniciar su controlador (en programación, interface builder), que no podemos suponer que es la mejor solución. A pesar de que he editado mi respuesta.
    • Esto funciona, pero se ve como un hack. ¿Hay algún aviso en la documentación oficial acerca de esto?
  5. 3

    Usted puede añadir este método en su vista controlador, como se muestra en este URL:

    -(void)viewDidLayoutSubviews
    {
        [super viewDidLayoutSubviews];
        self.searchBar.frame = 
        CGRectMake(0, self.topOfViewOffset, self.searchBar.frame.size.width, self.searchBar.frame.size.height);
    }
  6. 2

    Otro enfoque es establecer self.automaticallyAdjustsScrollViewInsets = YES; en el controlador de vista.
    Esta opción está habilitada de forma predeterminada. Pero en tu caso:

    Veo que estás usando EGORefreshHeaderView. Juega con contentInset de UITableView. Así que cuando la suelta, encabezado restablecer margen superior en lugar de restaurar el valor anterior.

  7. 0

    Las respuestas anteriores podría solucionar su problema pero en lugar de muchos otros problemas, por ejemplo:
    Vistas personalizadas no están centradas por Y debido a que la barra de navegación se vuelve opaco por lo tanto lo empuja hacia abajo todos sus puntos de vista.

    Tener translúcido de la barra de navegación no es el causante de este problema no hace que el problema se publicó en iOS 11+. Sin embargo he encontrado ninguna solución para que funcione en todas las plataformas iOS a partir de iOS 9.

    • mismo aquí. ninguno de los de arriba parecen solucionar el problema.
  8. -1

    Si quieres tener un control completo sobre los puntos de vista y evitar defectuoso de los ajustes de iOS, subclase UITableView y ajustar los márgenes (tanto de desplazamiento y indicators)- (void)willMoveToWindow:(UIWindow *)newWindow. A mí me funciona.

  9. -4

    Otra opción es abrir su Información.plist archivo de código fuente y modo de introducir la siguiente información:

    <key>UIViewControllerBasedStatusBarAppearance</key>
    <false/>
    <key>UIStatusBarHidden</key>
    <true/>

    Espero que esto ayude.

    • No creo que esto afectaría a la vista de todos.

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein