ios objective-c uitableview ios7

ios - Elimine el espacio vacío antes de las celdas en UITableView



objective-c ios7 (25)

¿Las celdas de UITableView muestran en el espacio vacío cuando se desplaza hacia abajo?

Si es así, entonces el problema podría ser el recuadro que se agrega a UITableView debido al controlador de navegación que tiene en su vista. El recuadro se agrega a la vista de tabla para que el contenido se coloque debajo de la barra de navegación cuando no se ha producido desplazamiento. Cuando se desplaza la tabla, el contenido se desplaza y se muestra debajo de una barra de navegación transparente. Por supuesto, este comportamiento solo se desea si la vista de tabla comienza directamente debajo de la barra de navegación, que no es el caso aquí.

Otra cosa a tener en cuenta es que iOS ajusta el recuadro de contenido solo para la primera vista en la jerarquía de vista si es UIScrollView o su descendiente (por ejemplo, UITableView y UICollectionView ). Si su jerarquía de vistas incluye múltiples vistas de desplazamiento, automaticallyAdjustsScrollViewInsets AdjustsScrollViewInsets hará ajustes solo al primero.

A continuación, se indica cómo cambiar este comportamiento:

a) Constructor de interfaz

  • Seleccione el controlador de vista
  • Inspector de Aperturas Abiertas
  • Hay una propiedad llamada "Ajustar las inserciones de la vista de desplazamiento" en el inspector de atributos de IB (cuando se selecciona un controlador de vista) que está activado de manera predeterminada. Desmarque esta opción:


    (Imagen cortesía de Dheeraj D )

No estoy seguro de qué versión de Xcode presentó esta opción (no la detecté en las notas de la versión), pero al menos está disponible en la versión 5.1.1.

Editar: para evitar confusiones, esta fue la tercera opción mencionada en los comentarios

b) programáticamente

Agregue esto a ie viewDidLoad (créditos a la respuesta de Slavco Petkovski y al comentario de Cris R )

// Objective-C self.automaticallyAdjustsScrollViewInsets = NO; // Swift self.automaticallyAdjustsScrollViewInsets = false

c) Esto podría ser relevante para los escolares de edad avanzada

Puedes arreglar esto agregando

tableView.contentInset = UIEdgeInsetsZero //Swift 3 Change tableView.contentInset = UIEdgeInsets.zero

O si está utilizando IB y si la barra de navegación no es transparente (no se puede ver en la captura de pantalla)

  • Seleccione el controlador de vista
  • Inspector de Aperturas Abiertas
  • En la opción Ver opciones del controlador Extender bordes, desmarque "Debajo de las barras superiores"

Actualmente estoy tratando de poner un UITableView en una ubicación diferente en lugar de en la parte superior de mi controlador de vista. Dicho esto, está tratando de agregar el encabezado en la parte superior para dar cuenta de la barra de navegación, pero esto no es necesario ya que no tengo en la parte superior de mi controlador.

Si pongo la esquina superior izquierda de UITableView donde quiero que estén las celdas, no pone las celdas allí:

Ahora, si solo muevo la vista de tabla para que las celdas estén en el lugar correcto, aparece un problema diferente: las celdas se pueden mover hasta allí cuando se desplaza (esto es con el dedo sobre el controlador de navegación):

Cuando lo dejo ir, sí, las celdas irán justo debajo de la barra de búsqueda, pero obviamente este es un problema de cómo puedes ponerlas encima.

¿Cómo voy a hacer esto? ¿Hay alguna manera más fácil?


Acabo de encontrar una solución para esto.

Solo seleccione vista de tabla y haga clic en Editor -> Organizar -> Enviar al frente

Funcionó para mí y espero que les ayude a todos.


Bueno, para mí el problema ocurrió cuando arrastré una celda de prototipo desde el menú a la vista de tabla. Así que eliminé eso y simplemente configuré la celda del prototipo en 1 en las propiedades del inspector de vista de tabla


En 2017, lo que está funcionando para mí es simplemente esta línea

navigationController? .navigationBar.isTranslucent = false

No tengo idea de por qué eso incluso lo afectaría. Quizás alguien podría explicar. Pero estoy bastante seguro de que esta es la respuesta que la mayoría de la gente buscaría.


En My Case tuve un UILabel en la jerarquía de UITableView in view.

Lo moví "hacia adelante" y apareció el espacio en blanco. No estoy seguro de por qué, pero funciona así, si hay algo debajo de la vista de tabla, oculta el espacio en blanco.

También puedes intentar marcar / desmarcar "Ajustar las configuraciones de la vista de desplazamiento" en el inspector de tu vista en el guión gráfico.


En mi aplicación también he experimentado un problema como este. Establecí el recuadro de borde superior de tableView zero. También intenté establecer false para automaticallyAdjustsScrollViewInsets . Pero no funcionó.

Finalmente obtuve una solución de trabajo. No sé si esta es la forma correcta. Pero implementar el método de delegado heightForHeaderInSection funcionó para mí. Debe devolver un valor distinto de cero para trabajar esto (return zero mostrará el mismo espacio que antes).

override func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat { return 0.1 }


En mi caso, estaba usando ContainerViewController y poniendo UITableViewController en él. Después de eliminar ContainerViewController. Los problemas desaparecen.


En mi caso, yo estaba usando una vista de contenedor. (Vista principal -> Vista de contenedor -> UITableView)

El espacio extra en la parte superior, creo, es como el espacio de la barra de notificaciones del dispositivo (donde se muestra la hora, la batería). Realmente lo creo, no es una suposición.

Lo que hice fue del Constructor de UI:

  • seleccione el controlador de vista de tabla completo
  • Inspector de Aperturas Abiertas
  • Vaya a -> Ver controlador -> Diseño -> "Seleccionar quiere pantalla completa"

Establezca las inserciones de contenido en cero:


Estoy haciendo esto programáticamente, y simplemente moví mi addSubview (tableView) a la parte inferior después de agregar todas mis otras subvistas, ¡y resolvió mi problema!

No estoy seguro de por qué esto solo aparece en el dispositivo y no en mi simulador, pero de todos modos al menos hay una solución simple.


No puedo decirlo con certeza, pero parece que tienes un UIView extra atascado entre donde comienzan las células prototipo y la parte superior de la UITableView. Mi imagen se ve exactamente como la tuya si eliminas el texto / líneas que agregué.


Puede haber pre-agregado UIRefreshControl . Tengo este problema con un código como este:

self.refreshControl = [[UIRefreshControl alloc] init];{ [self.refreshControl setAttributedTitle:[[NSAttributedString alloc] initWithString:@"Your string"]]; [self.refreshControl addTarget:self action:@selector(updateScreen) forControlEvents:UIControlEventValueChanged]; }

Como ves, configuré el self.refreshController inmediatamente después de init

Pero, si configura refreshControl después de la configuración, entonces el espacio superior no lo interfiere.

UIRefreshControl *refreshControl = [[UIRefreshControl alloc] init];{ [self.refreshControl setAttributedTitle:[[NSAttributedString alloc] initWithString:@"Your String"]]; [self.refreshControl addTarget:self action:@selector(updateScreen) forControlEvents:UIControlEventValueChanged]; self.refreshControl = refreshControl; }


Puede usar este código en viewDidLoad o viewDidAppear donde se está creando su tabla:

// Remove blank space on header of table view videoListUITableView.contentInset = UIEdgeInsetsZero; // The iOS device = iPhone or iPod Touch CGSize iOSDeviceScreenSize = [[UIScreen mainScreen] bounds].size; // Set the height of the table on the basis of number of rows videoListUITableView.frame = CGRectMake(videoListUITableView.frame.origin.x, videoListUITableView.frame.origin.y, videoListUITableView.frame.size.width, iOSDeviceScreenSize.height-100); // Hide those cell which doesn''t contain any kind of data self.videoListUITableView.tableFooterView = [[UIView alloc] init];


Seleccione la vista de tabla en su guión gráfico y asegúrese de que el estilo esté configurado en "Normal", en lugar de "Agrupado". Puede encontrar esta configuración en la pestaña Inspector de atributos.


Si está haciendo esto en iOS 11, automáticamente AdjustsScrollViewInsets no funcionará ya que está en desuso, el siguiente código funcionó para mí según la respuesta en esta publicación: https://.com/a/44391269/5476481

if #available(iOS 11.0, *) { tblView.contentInsetAdjustmentBehavior = .never } else { automaticallyAdjustsScrollViewInsets = false }

Espero que esto ayude.


Siempre que UITableView no sea la primera subvista del controlador de vista, el espacio vacío no aparecerá.

Solución: agregue un objeto de vista oculto / claro (vistas, etiquetas, botón, etc.) como la primera subvista del controlador de vista (al mismo nivel que UITableView pero antes).


También tuve este problema, el tableView no era la última vista en la jerarquía. En mi caso, tenía una vista anterior (aunque no se superponían entre sí), así que la arrastré por encima de tableView en la jerarquía y eso fue lo que hice.


Todavía no estoy seguro de qué causó ese espacio extra en la parte superior, pero descubrí que eliminar UITableView con el espacio y reemplazarlo con uno nuevo le quitaba espacio.

Debo haber arrastrado una UIView allí accidentalmente, pero no pude seleccionarla, así que no pude eliminarla.


Tuve el mismo problema y estoy bastante seguro de que tenía una UIView allí en un momento dado. Simplemente copiando toda la vista de tabla, eliminándola y pegándola de nuevo, la solucioné para mí.


UIView se puede insertar en la parte superior e inferior de la tabla (arrastrar y soltar). Establezca sus propiedades como transparentes y una altura de 1 px. Esto es para eliminar el relleno adicional en frente de las celdas.


Verifique su marco de vista de tabla en el guión gráfico o xib. El mío por defecto tiene un valor de posición ay, de ahí el error


Xcode 8 error ...

Pruebe esto primero si su estilo Storyboard UITableView está establecido en Sin formato.

Establezca el estilo de la tabla como Agrupado y luego vuelva a Sin formato. Esto eliminó el espacio en mi aplicación al principio de mi UITableView.


comprobar

if ([tableView respondsToSelector:@selector(setSeparatorInset:)]) { [tableView setSeparatorInset:UIEdgeInsetsZero]; }

  • mencione la función de delegado de tableview cellForRowAtIndexPath:
  • puede manejar ambos ios 6 y 7.

I just found a solution for this. In my case, i was using TabBarViewController, A just uncheck the option ''Adjust Scroll View Insets''. Issues goes away. https://i.stack.imgur.com/vRNfV.png


NINGUNO de los anteriores me ayudó. pero hacer esto ayudó :

self.tableView.contentInset = UIEdgeInsetsMake(-64, 0, 0, 0)

en lugar de ''-64'' puede poner cualquier otro número dependiendo de la altura de su barra de navegación.