iOS 7: UITableView se muestra en la barra de estado

La primera pantalla de mi aplicación es un UITableViewController sin una barra de navegación, lo que significa que el contenido fluye debajo de la barra de estado, así que hay un montón de texto colisiones. He ajustado tanto de las propiedades de Under top bars y Adjust scroll view insets que realmente detener su desplazamiento bajo, pero el costo de mantenimiento de la parte superior de la vista de tabla bajo. He intentado establecer UITableView marco para compensar por 20 píxeles, pero no aparece para llevarse a efecto, y como yo actualmente necesita la aplicación para que sea compatible con iOS 6 no puedo saltar a iOS 7 Storyboards para forzar el diseño automático para utilizar la parte superior de la altura de la guía. Alguien ha encontrado una solución que funciona para ambas versiones?

Cosas que he probado: configuración de edgesForExtendedLayout, cambiar la configuración dentro de Storyboard para Under top bars y Adjust scroll view, forzando el marco de una nueva área.

Una imagen vale más que mil palabras:
iOS 7: UITableView se muestra en la barra de estado

  • Una rápida solución podría ser la de añadir un espacio en blanco de 20 píxeles encabezado de la tabla cuando se ejecuta en iOS 7.
  • Ya tengo un UITableView de cabecera, que también fluye debajo de la barra de estado.
  • ¿Por qué no usar el auto guía de diseño en iOS 6? Funciona.

26 Kommentare

  1. 364

    Para cualquier persona interesada en la reproducción de este, simplemente siga estos pasos:

    1. Crear un nuevo iOS proyecto
    2. Abrir el principal storyboard y eliminar el valor predeterminado inicial/UIViewController
    3. A arrastrar un nuevo UITableViewController de la Biblioteca de Objetos de
    4. Se establece como la vista inicial del controlador de
    5. De alimentación de la mesa algunos datos de prueba

    Si usted sigue los pasos de arriba, al ejecutar la aplicación, verá que nada, incluyendo afinando Xcode las casillas de verificación para «Extender los Bordes en {parte Superior, Inferior, Opaco} Barras de» obras para detener la primera fila de la que aparece en la barra de estado, ni se puede enfrentar esta programación.

    E. g. En el escenario anterior, el siguiente tendrá no efecto:

    //These do not work
    self.edgesForExtendedLayout=UIRectEdgeNone;
    self.extendedLayoutIncludesOpaqueBars=NO;
    self.automaticallyAdjustsScrollViewInsets=NO;

    Este problema puede ser muy frustrante, y creo que es un error en la Manzana del final, especialmente porque muestra hasta en sus propios pre-cableado UITableViewController de la biblioteca de objeto.

    No estoy de acuerdo con todo el mundo que está tratando de resolver esto mediante el uso de cualquier forma de «Números Mágicos» por ejemplo, «el uso de un delta de 20px». Este tipo de acoplado, la programación es definitivamente no es lo que Apple quiere que hagamos aquí.

    He descubierto dos soluciones a este problema:

    • La preservación de la UITableViewController‘s de la escena:

      Si desea mantener la UITableViewController en el guión, sin colocación manual en otro punto de vista, puede incrustar el UITableViewController en un UINavigationController (Editor > Incrustar En > Controlador de Navegación) y desactive la casilla «Muestra la Barra de Navegación» en el inspector. Esto resuelve el problema sin ajustes adicionales necesarios, y también conserva su UITableViewController‘s de la escena en el guión gráfico.

    • El uso de Autodiseño y la incrustación de la UITableView en otro punto de vista (creo que esta es la forma en que Apple nos quiere hacer esto):

      Crear un vacío UIViewController y arrastre el UITableView en ella. A continuación, pulse la tecla Ctrl de su UITableView hacia la barra de estado. Como el ratón llega a la parte inferior de la barra de estado, usted verá un Autodiseño de la burbuja que dice «Top Guía de Diseño». Suelte el botón del ratón y elegir «Espaciado Vertical». Que le indicará el sistema de diseño para colocarlo justo debajo de la barra de estado.

    He probado de las dos formas en una aplicación vacía y ambos trabajan. Puede que tenga que hacer algunos ajustes adicionales para hacerlos trabajar para su proyecto.

    • Estoy más probabilidades de ir a la tripa y evitar el uso de desnudo UITableViewControllers en algún momento en el futuro cercano. Es una muy extraña decisión de Apple, así que lo más probable es un error.
    • FYI, la opción 1 (incrustación en un nav controlador) resultados en las células que están siendo visible detrás de la barra de estado translúcido cuando se desplaza a través de la mesa.
    • Me di cuenta de que también, pero creo que está bien en algún momento. Apple hizo lo mismo en el móvil de Safari abrió vista de pestañas, pestañas se muestra debajo de la barra de estado. La navegación solución de controlador es la solución más sencilla, yo raíz de ella. Sin embargo, la barra de estado translúcido es una idea estúpida.
    • Cuando hago el control de arrastre desde el formato tableview, yo no se haya ejecutado en la barra de estado. No es visible la barra de estado en la vista, no estoy seguro de lo que quieres decir aquí…
    • Podría recomendar la manera apropiada de hacerlo mediante programación? Tengo un formato tableview que es una propiedad de un controlador de vista que hereda de UITableViewController. El formato tableview se establece con un método initWithTableView: que establece el auto.formato tableview = formato tableview;
    • Opción 2 ya no funciona en Xcode 5. La acción descrita (ctrl + arrastrar) nunca han trabajado, ya que es de titularidad de los establecimientos del sistema, pero incluso si usted arrastrar manualmente a la Escena del Árbol en la izquierda, arriba a la guía de diseño NO funciona (se debe hacer, AFAICT – creo que este es otro gran error en el diseño Automático 🙁 🙁 )
    • Una gran paz de código, funciona como un encanto!
    • Desmarcando ‘Debajo de la parte Superior de las Barras» funciona para mí en Xcode 5.0.2
    • parece estúpido cuando se utiliza un encabezado con el formato tableview, la cabecera permanece fijo en la parte superior y los elementos que va a desaparecer detrás – y reapear detrás de la transparencia de la barra de estado…
    • La opción 1) trabajó como un encanto para mí.
    • Funciona en Xcode 6, usted debe elegir «Top Espacio Superior de la Guía de Diseño», y cambiar la constante 0
    • para la solución #2 – ver descripción detallada en respuesta a continuación por @ErikAGriffin

  2. 84

    Si usted está haciendo las cosas a través de programación y el uso de un UITableViewController sin UINavigationController su mejor apuesta es hacer lo siguiente en viewDidLoad:

    Swift 3

    self.tableView.contentInset = UIEdgeInsets(top: 20, left: 0, bottom: 0, right: 0)

    Anterior Swift

    self.tableView.contentInset = UIEdgeInsetsMake(20.0f, 0.0f, 0.0f, 0.0f);

    La UITableViewController todavía desplazarse detrás de la barra de estado pero no será bajo cuando se desplaza a la parte superior.

    • Usted puede agregar una comprobación de la versión del SO > 7 y soporte de los sistemas operativos más antiguos demasiado (no hay margen para ellos). De lo contrario, esto funcionó bien para mis propósitos.
    • Codificar un valor de la altura no es la mejor idea.
    • Sí, uso topLayoutGuide la longitud del lugar.
    • No funciona en el modo de paisaje para mí
    • Yo uso la UIApplication.sharedApplication.statusBarFrame.size.height en lugar de 20.
    • Que ha sido actualizado a la UIApplication.compartida.statusBarFrame.tamaño.la altura de estos días.
    • creo -20 debería estar allí

  3. 23

    Por favor nota: Esto funcionó para mí para la siguiente configuración:

    • Sin barra de navegación en la parte superior de la pantalla (vista de tabla se reúne la barra de estado)
    • La vista de la tabla no es desplazable

    Si los dos anteriores requisitos no se cumplen que su kilometraje puede variar.

    Post Original

    He creado mi punto de vista mediante programación y este terminó trabajando para mí:

    - (void) viewDidLayoutSubviews {
        //only works for iOS 7+
        if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0) {
            CGRect viewBounds = self.view.bounds;
            CGFloat topBarOffset = self.topLayoutGuide.length;
    
            //snaps the view under the status bar (iOS 6 style)
            viewBounds.origin.y = topBarOffset * -1;
    
            //shrink the bounds of your view to compensate for the offset
            viewBounds.size.height = viewBounds.size.height + (topBarOffset * -1);
            self.view.bounds = viewBounds;
        }
    }

    Fuente (en topLayoutGuide sección en la parte inferior de la página.39).

    • Interesante… yo era capaz de llamar como tal en mi proyecto sin ningún problema… puedo tener una manera más simple vista diseño de la estructura de lo que lo hizo sin embargo. Tu sugerencia es correcta, voy a hacer ese cambio en mi respuesta.
    • Se me ocurrió para toparse con el problema, cuando he girado mi aplicación. Si usted tuvo la rotación desactivada, es probable que no tenga un problema.
    • No tengo la rotación activada en mi proyecto y me encontré con el problema, pero sí, sigue siendo un buen punto.
    • Para cualquier implementación de su propio Contenedor controlador, esta es la forma correcta de ajustar por el estado o barra de navegación underlapping!
    • Si cambia el origen, pero no a la altura de la vista de los límites, no el fondo se recorta por el borde inferior de la pantalla según la cantidad cambiado el origen? (así se hace imposible ver las últimas filas de píxeles)
    • Sí, la parte inferior de la imagen será recortada, simplemente reducir la altura por topBarOffset * -1 así.
    • Sí, esto es totalmente erróneo.
    • Hice esto en un formato tableview controlador dentro de un controlador de navegación y no hace nada para mí, pero tartamudean, incorrectamente la posición inicial desplácese a la ubicación, y no dejar suficiente espacio vacío en la parte superior
    • Más pruebas: Configuración de bounds.size.height = bounds.size.height - 20 le bucle negativo altura rápidamente. No sé cómo es este trabajo para nadie.
    • Ustedes están en lo correcto, he tenido problemas con esta aplicación, así que después va a tener que hacer uso de ella en otros escenarios. He editado la respuesta con una nota sobre lo que la configuración de esta solución funciona con.

  4. 20

    Añadir a la respuesta:

    después de la 2ª método inicialmente no parecen funcionar yo hice algunos retoques adicionales y han encontrado la solución.

    TLDR; la respuesta de la 2ª solución casi funciona, pero para algunas versiones de xCode ctrl+arrastrar «Top Guía de Diseño» y la selección de Espaciado Vertical no hace nada. Sin embargo, por primera ajustar el tamaño de la Vista de Tabla y, a continuación, seleccionar «Top Espacio Superior de la Guía de Diseño» obras


    1. Arrastre en blanco ViewController en el guión gráfico.
      iOS 7: UITableView se muestra en la barra de estado

    2. Arrastre un UITableView objeto en la Vista. (No UITableViewController). Posición en el mismo centro de utilizar el azul guías de diseño.

    iOS 7: UITableView se muestra en la barra de estado
    iOS 7: UITableView se muestra en la barra de estado

    1. Arrastre un UITableViewCell en el formato tableview. Este será el prototipo de la reutilización de la célula, así que no olvide ajustar es la Reutilización de Identificador en la pestaña Atributos o usted conseguirá un accidente.

    iOS 7: UITableView se muestra en la barra de estado
    iOS 7: UITableView se muestra en la barra de estado

    1. Crear su costumbre subclase de UIViewController, y agregar el <UITableViewDataSource, UITableViewDelegate> protocolos. No olvides poner tu storyboard del ViewController a esta clase en la Identidad del Inspector.

    2. Crear una toma de corriente para su formato tableview en su archivo de implementación, y el nombre «formato tableview»

    iOS 7: UITableView se muestra en la barra de estado
    iOS 7: UITableView se muestra en la barra de estado

    1. Derecho haga clic en el formato tableview y arrastre el dataSource y el delegado para su ViewController.

    iOS 7: UITableView se muestra en la barra de estado

    Ahora para la parte de que no se recorte en la barra de estado.

    1. Agarrar el borde superior de la Vista de Tabla y moverlo hacia abajo, a uno de los discontinuas azules auto-guías de diseño que están cerca de la parte superior

    iOS 7: UITableView se muestra en la barra de estado

    1. Ahora, usted puede controlar el arrastre de la Vista de Tabla en la parte superior y seleccione el Espacio de Arriba Guía de Diseño

    iOS 7: UITableView se muestra en la barra de estado

    1. Te dará un error acerca de la ambigua diseño de formato tableview, sólo Añadir que Falta Limitaciones y su hecho.

    iOS 7: UITableView se muestra en la barra de estado

    Ahora usted puede configurar su vista de tabla como normal, y no el clip de la barra de estado!

  5. 11
    - (void) viewDidLayoutSubviews {
        if (floor(NSFoundationVersionNumber) > NSFoundationVersionNumber_iOS_6_1) {
            self.navigationController.navigationBar.barStyle = UIBarStyleBlackOpaque;
            if ([self respondsToSelector:@selector(edgesForExtendedLayout)])
                self.edgesForExtendedLayout = UIRectEdgeNone;   //iOS 7 specific
            CGRect viewBounds = self.view.bounds;
            CGFloat topBarOffset = self.topLayoutGuide.length;
            viewBounds.origin.y = topBarOffset * -1;
            self.view.bounds = viewBounds;
            self.navigationController.navigationBar.translucent = NO;
        }
    }

    https://developer.apple.com/library/ios/documentation/userexperience/conceptual/TransitionGuide/SupportingEarlieriOS.html#//apple_ref/doc/uid/TP40013174-CH14-SW1

    • a mi me funciona es compatible con iOS 6 y iOS 7
    • el switch <= a > y quitar el vacío si el bloque
    • La lectura de self.topLayoutGuide.length de viewDidLayoutSubviews va a arruinar el diseño de niño vistas.
    • mientras lo hace como se describe, auto.formato tableview no puede desplazarse.
  6. 8

    Esta es la forma de escribir en «Swift»
    Un ajuste a @lipka la respuesta:

    tableView.contentInset = UIEdgeInsetsMake(20.0, 0.0, 0.0, 0.0)
    • No se swift permitido aquí?
    • La única solución que funcionó para mí, que no me hace crear un UIVIewController
    • Esto es menos que ideal, ya que mantiene el margen superior a los 20, incluso en lugares donde no hay ningún valor predeterminado de la barra de estado en ios8
    • Esta variación maneja cualquier configuración de bien para mí: - (void)viewDidLayoutSubviews { if (self.tableView.contentInset.top != self.topLayoutGuide.length) { self.tableView.contentInset = UIEdgeInsetsMake(self.topLayoutGuide.length, 0.0, 0.0, 0.0); } }
  7. 7

    Seleccione UIViewController en su guión un desmarque la opción de Extender los Bordes en la parte Superior Bares.
    Trabajó para mí.
    : )

    • Por desgracia, no funcionó para mí. Completamente predeterminado UITableViewController todavía se superpone a la barra de estado. No creo que la barra de estado de cuenta como una Barra Superior. Sólo las barras de navegación y barra de pestañas.
    • La única solución que funciona para mí, ty. (Tenga en cuenta que usted tiene que «acortar» la vista de la tabla debajo de la barra de estado en el IB y la actualización de las restricciones).
    • esto funcionó para mí el hombre, muchas gracias!
    • Trabajó para mí en Xcode 8 con un UITableViewController.
  8. 5

    Para Xcode 7, desmarcando la ‘translúcido’ marca de verificación de la Barra de Navegación trabajó para mí.

    iOS 7: UITableView se muestra en la barra de estado

    • Más simple, más rápida, más fácil, más segura? solución. No sé por qué esto tiene tan pocos upvotes en comparación con todo lo demás.
  9. 3

    Esto va a arreglar para un UITableViewController (sin números de magia). La única cosa que yo no podía conseguir que fijar es si usted está en una llamada de teléfono, en cuyo caso la parte superior del formato tableview es empujado hacia abajo demasiado. Si alguien sabe cómo solucionar esto, por favor háganoslo saber.

    class MyTableViewController: UITableViewController {
    
        override func viewDidLoad() {
            super.viewDidLoad()    
            configureTableViewTop()
        }
    
        override func viewWillTransitionToSize(size: CGSize, withTransitionCoordinator coordinator: UIViewControllerTransitionCoordinator) {
            super.viewWillTransitionToSize(size, withTransitionCoordinator: coordinator)
            coordinator.animateAlongsideTransition({ (context) -> Void in
                }, completion: { (context) -> Void in
                    self.configureTableViewTop()
            })
        }
    
        func configureTableViewTop() { 
            tableView.contentInset.top = UIApplication.sharedApplication().statusBarFrame.height
        }
    }
  10. 2

    No sé cómo Kosher es, pero me encontré con que este esquema se mueve el ViewController la vista hacia abajo y proporciona la barra de estado con un sólido background:

    - (void)viewDidLoad {
        [super viewDidLoad];
    
        //Shove everything down if iOS 7 or later
        float systemVersion = [[[UIDevice currentDevice] systemVersion] floatValue];
        if (systemVersion >= 7.0f) {
    
            //Move the view down 20 pixels
            CGRect bounds = self.view.bounds;
            bounds.origin.y -= 20.0;
            [self.view setBounds:bounds];
    
            //Create a solid color background for the status bar
            CGRect statusFrame = CGRectMake(0.0, -20.0, bounds.size.width, 20);
            UIView* statusBar = [[UIView alloc] initWithFrame:statusFrame];
            statusBar.backgroundColor = [UIColor redColor];
            [self.view addSubview:statusBar];
        }

    Por supuesto, sustituir redColor con cualquier color que usted desea para el fondo.

    Debe hacer por separado uno de los swizzles para establecer el color de los caracteres/símbolos en la barra de estado. Yo uso View controller-based status bar appearance = NO y Status bar style = Opaque black style en el plist, para hacer esto de manera global.

    Parece funcionar, y me interesaría escuchar de los errores o problemas con él.

    • esto no funciona para mí
  11. 2

    chappjc la respuesta de las grandes obras cuando se trabaja con XIBs.

    He encontrado la solución más limpia a la hora de crear TableViewControllers mediante programación es mediante un ajuste de la UITableViewController instancia en otro UIViewController y establecimiento de limitaciones en consecuencia.

    Aquí es:

    UIViewController *containerLeftViewController = [[UIViewController alloc] init];
    UITableViewController *tableViewController = [[UITableViewController alloc] init];
    
    containerLeftViewController.view.backgroundColor = [UIColor redColor];
    
    hostsAndMoreTableViewController.view.translatesAutoresizingMaskIntoConstraints = NO;
    [containerLeftViewController.view addSubview:tableViewController.view];
    
    [containerLeftViewController addChildViewController:tableViewController];
    [tableViewController didMoveToParentViewController:containerLeftViewController];
    
    NSDictionary * viewsDict = @{ @"tableView": tableViewController.view ,
                                  @"topGuide": containerLeftViewController.topLayoutGuide,
                                  @"bottomGuide": containerLeftViewController.bottomLayoutGuide,
                                  };
    [containerLeftViewController.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[tableView]|"
                                                                                             options:0
                                                                                             metrics:nil
                                                                                               views:viewsDict]];
    [containerLeftViewController.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:[topGuide][tableView][bottomGuide]"
                                                                                             options:0
                                                                                             metrics:nil
                                                                                               views:viewsDict]];

    Saludos, Ben

  12. 1

    Creo que el enfoque para el uso de UITableViewController podría ser un poco diferente de lo que has hecho antes. Se ha trabajado para mí, pero podría no ser un fan de ella. Lo que he hecho es tener un controlador de vista con un contenedor de vista que apunta a mi UItableViewController. De esta manera soy capaz de utilizar el TopLayoutGuide a mi en el guión gráfico. Simplemente añade la restricción de que el contenedor de vista y usted debe tener cuidado para ambos iOS7 y iOS6.

  13. 1

    Terminé usando uno extra que ver con el fondo deseado, añadió tras formato tableview y se coloca debajo de la barra de estado:

        self.CoverView = [[UIView alloc]init];
    
        if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0) {
    
        self.CoverView.frame = CGRectMake(0,0,self.view.bounds.size.width,20);
        }
    
        self.CoverView.backgroundColor = [UIColor whiteColor];
        self.TableView = [[UITableView alloc]initWithFrame:CGRectMake(0,
        self.CoverView.bounds.size.height,XXX, YYY)];
        [self.view addSubview:self.TableView];
        [self.view addSubview:self.CoverView];

    No es muy bonita, pero es bastante simple solución, si usted necesita trabajar con xib-menos vistas, y ambos IOS6 y IOS7

  14. 1

    He hecho esto para Retina/No-Retina display como

    BOOL isRetina = FALSE;
    
    if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)]) {
        if ([[UIScreen mainScreen] scale] == 2.0) {
            isRetina = TRUE;
        } else {
            isRetina = FALSE;
        }
    }
    
    if (isRetina) {
        self.edgesForExtendedLayout=UIRectEdgeNone;
        self.extendedLayoutIncludesOpaqueBars=NO;
        self.automaticallyAdjustsScrollViewInsets=NO;
    }
  15. 1

    La siguiente solución funciona bastante bien en el código sin usar magia constantes, y las cuentas para el usuario cambiar el tamaño de la clase, por ejemplo, a través de rotaciones o side-by-side apps en el ipad:

    - (void)traitCollectionDidChange:(UITraitCollection *)previousTraitCollection {
        [super traitCollectionDidChange:previousTraitCollection];
        //Fix up content offset to ensure the tableview isn't underlapping the status bar.
        self.tableView.contentInset = UIEdgeInsetsMake(self.topLayoutGuide.length, 0.0, 0.0, 0.0);
    }
  16. 1

    Obras de swift 3 – En viewDidLoad();

    let statusBarHeight = UIApplication.shared.statusBarFrame.height
    
    let insets = UIEdgeInsets(top: statusBarHeight, left: 0, bottom: 0, right: 0)
    tableView.contentInset = insets
    tableView.scrollIndicatorInsets = insets

    Este código:
    1. Se pone a la altura de la barra de estado
    2. Da a la parte superior de la vista de la tabla de contenido del recuadro igual a la altura de la barra de estado.
    3. Da el desplazamiento del indicador de la misma área, por lo que aparece debajo de la barra de estado.

  17. 1

    Para aquellos como yo que prefieren no incrustar sus UITableViewController en un UIViewController intente esto:

    Una costumbre UITableViewController subclase puede añadir una máscara de vista para el formato tableview del superview. Agregar la máscara en viewDidAppear, y quitar la máscara en viewWillDisappear.

    private var statusBarMaskView: UIView!
    
    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)
    
        if let superview = self.tableView.superview {
            self.statusBarMaskView = UIView(frame: CGRect.zero)
            superview.insertSubview(self.statusBarMaskView, aboveSubview: self.tableView)
            self.statusBarMaskView.backgroundColor = self.tableView.backgroundColor
    
            //using a nice constraint layout library to set the frame
            self.statusBarMaskView.pinTop(to: superview)
            self.statusBarMaskView.pinLeft(to: superview)
            self.statusBarMaskView.pinRight(to: superview)
            self.statusBarMaskView.addHeightConstraint(with: 22.0)
            ////
        }
    }
    
    override func viewWillDisappear(_ animated: Bool) {
        super.viewWillDisappear(animated)
    
        self.statusBarMaskView.removeFromSuperview()
        self.statusBarMaskView = nil
    }
  18. 0

    Tuve un UISearchBar en la parte superior de mi UITableView y el siguiente trabajado;

    self.tableView.contentInset = UIEdgeInsetsMake(20, 0, 0, 0);
    self.tableView.contentOffset = CGPointMake(0, -20);

    Compartir y disfrutar…

  19. 0

    Abrahamchez la solución
    https://developer.apple.com/library/ios/qa/qa1797/_index.html
    funcionó para mí como sigue. Yo solo tenía un UITableviewcontroller como mi vista inicial. Yo había probado el desplazamiento de código y la integración en un navcon pero ni resuelto la barra de estado de la transparencia.

    Agregar un Viewcontroller y hacen la vista inicial. Esto debería mostrar crítica de Top & Fondo Guías de Diseño.

    Arrastre el antiguo formato tableview a la Vista en el nuevo controlador.

    Hacer todas las cosas para modernizar la tabla en el nuevo controlador:

    Cambiar su antiguo controlador de vista.h archivo para heredar/subclase de UIViewController en lugar de UITableViewController.

    Agregar UITableViewDataSource y UITableViewDelegate para el viewcontroller del .h.

    Volver a conectar todo lo necesario en el guión gráfico, tales como una barra de búsquedas.

    Lo importante es conseguir que el conjunto de restricciones, como en el caso de Apple Q&A, no me molesta la inserción de una barra de herramientas. No hay certeza de la secuencia exacta. Pero un icono rojo apareció en el Diseño de las Guías, tal vez cuando he construido. Hice clic en él y vamos a instalar Xcode/limpiar las restricciones.

    Luego hice clic en todas partes hasta encontrar el Espacio Vertical de la restricción y cambió su superior valor de -20 a 0 y funcionó perfectamente.

  20. 0

    Estoy usando un UISplitViewController con un navigationcontroller y un tableviewcontroller. Esto funcionó para mí en la vista principal después de probar muchas de las soluciones aquí:

    float systemVersion = [[[UIDevice currentDevice] systemVersion] floatValue];
    if (systemVersion >= 7.0f) {
    
        //Move the view down 20 pixels
        CGRect bounds = self.view.bounds;
        bounds.origin.y -= 20.0;
        [self.navigationController.view setBounds:bounds];
    
        //Create a solid color background for the status bar
        CGRect statusFrame = CGRectMake(0.0, -20.0, bounds.size.width, 20);
        UIView* statusBar = [[UIView alloc] initWithFrame:statusFrame];
        statusBar.backgroundColor = [UIColor whiteColor];
        [statusBar setAlpha:1.0f];
        [statusBar setOpaque:YES];
        [self.navigationController.view addSubview:statusBar];
    }

    Es similar a la Caliente Lame’ solución, sino que se aplica la subvista a la navigationController.

    • Esta es la única respuesta que ha trabajado para mí en iOS 8!
  21. 0
    override func viewDidLoad() {
     //your code
    
     if let nc = self.navigationController {
       yourView.frame.origin.y = nc.navigationBar.frame.origin.y + nc.navigationBar.frame.height
      }
    }
  22. 0

    Aquí es un Swift 2.3. (Xcode 8.0) solución. He creado una subclase de UITableView.

    class MYCustomTableView: UITableView
    {   
        override func drawRect(rect: CGRect) {
            super.drawRect(rect)
            contentInset    = UIEdgeInsetsZero
        }
    }

    El contenido del Recuadro debe ser siempre Cero (por defecto). Estoy ajuste de Cero de forma manual. También puede agregar un método de verificación que hace el cheque y si es otra cosa de lo que usted desea que se acaba de obtener la correcta rect. El cambio se refleja sólo cuando el formato tableview se dibuja (que no suele suceder a menudo).

    No te olvides de actualizar el formato tableview en su IB (en el TableViewController o simplemente formato tableview en el interior de su ViewController).

  23. 0

    Me iba a enfrentar este problema en ios 11 pero el diseño era correcta para ios 8 – 10.3.3 . Para mi caso me puse un Espacio Vertical de la Restricción a Superview.Margen superior en lugar de Superview.La parte superior que funciona para ios 8 – 11.

    iOS 7: UITableView se muestra en la barra de estado

  24. -1

    ver todas las soluciones:
    mi proyecto es simplemente usar xib, por lo que, la solución con guión gráfico no funcionó para mí.
    auto.edgesForExtendedLayout = UIRectEdgeNone;
    solo funciona para el controlador si navigationbar es visible.
    pero si su vista es simplemente tener la barra de estado, que no va a funcionar.
    así que puedo combinar dos condiciones.

    - (void) viewDidLayoutSubviews {
    float systemVersion = [[[UIDevice currentDevice] systemVersion] floatValue];
    if (systemVersion >= 7.0f) {
        CGRect bounds = self.view.bounds;
        if(self.navigationController == nil || self.navigationController.isNavigationBarHidden == YES){
            bounds.origin.y -= 20.0;
            [self.view setBounds:bounds];
        }
        else{
            self.edgesForExtendedLayout = UIRectEdgeNone;
        }
    }

    ayudar a que esto funciona.

  25. -2

    Si usted también necesita el apoyo de iOS 6, tendrás que condicionalmente se mueven hacia abajo. Que es, en iOS 7 sólo debe mover hacia abajo de los 20 puntos (ya sea a través de frame la manipulación o el uso de auto-layout), y en iOS 6 lo deja solo. No creo que usted puede hacer esto en IB, así que tendrás que hacerlo en el código.

    EDITAR

    Usted puede hacer esto en IB, mediante el iOS6/iOS7 deltas. Fijar su posición en iOS 7, iOS 6 puesta en el delta Y a 20points. Ver de este MODO la pregunta para obtener más información.

    • La configuración de la estructura no cambia por desgracia.
    • Lo que no funciona al respecto? La vista de tabla no se mueve hacia abajo?
    • Sí, permanece en la misma posición. He intentado self.view.frame y self.tableView.frame, en tanto viewWillAppear y viewDidLoad. Para estar seguro que yo también establecer setContentNeedsDisplay para forzar una actualización.
    • Es la disposición automática habilitada?
    • Sí, es autodiseño y el Storyboard.
    • Bien, a continuación, establecer el marco no va a hacer mucho. No se puede establecer el marco, mientras que la disposición automática no está habilitada. Pero se me acaba de ocurrir una opción diferente, ver mi respuesta actualizada.
    • Sí, me di cuenta de lo tonto que yo estaba allí. Sin embargo, no parecen tener un contenido de delta modo dentro de IB, me asumir como no he actualizado mi Storyboards para iOS 7.
    • Usted necesita para hacer que demasiado. Usted puede hacerlo en el código, pero la actualización para iOS 7 parece ser el enfoque más sencillo entonces.

Kommentieren Sie den Artikel

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

Recent Articles

Python «set» con duplicados/elementos repetidos

Hay una forma estándar de representar un "conjunto" que puede contener elementos duplicados. Como yo lo entiendo, un conjunto tiene exactamente un cero o...

Python: generador de expresión vs rendimiento

En Python, ¿hay alguna diferencia entre la creación de un generador de objetos a través de un generador de expresión versus el uso de...

Cómo exportar/importar la Masilla lista de sesiones?

Hay una manera de hacer esto? O tengo que tomar manualmente cada archivo de Registro? InformationsquelleAutor s.webbandit | 2012-10-23

no distingue mayúsculas de minúsculas coincidentes en xpath?

Por ejemplo, para el xml a continuación <CATALOG> <CD title="Empire Burlesque"/> <CD title="empire burlesque"/> <CD...