¿Hay alguna forma de agregar espacio entre UITableViewCell
?
He creado una tabla y cada celda solo contiene una imagen. La imagen se asigna a la celda de esta manera:
cell.imageView.image = [myImages objectAtIndex:indexPath.row];
pero esto hace que la imagen se agrande y se ajuste a toda la celda, y no hay espacio entre las imágenes.
O digamos de esta manera, la altura de la imagen es, por ejemplo, 50, y quiero agregar 20 espacios entre las imágenes. ¿Hay alguna forma de lograr esto?
ios
objective-c
uitableview
saili
fuente
fuente
Respuestas:
Versión rápida
Actualizado para Swift 3
Esta respuesta es algo más general que la pregunta original por el bien de los futuros espectadores. Es un ejemplo complementario al ejemplo básico UITableView para Swift .
Visión general
La idea básica es crear una nueva sección (en lugar de una nueva fila) para cada elemento de la matriz. Las secciones se pueden espaciar utilizando la altura del encabezado de sección.
Cómo hacerlo
Configure su proyecto como se describe en el ejemplo UITableView para Swift . (Es decir, agregue
UITableView
ay conecte latableView
salida al controlador de vista).En Interface Builder, cambie el color de fondo de la vista principal a azul claro y el
UITableView
color de fondo a claro.Reemplace el código ViewController.swift con lo siguiente.
ViewController.swift
Tenga en cuenta que
indexPath.section
se usa en lugar deindexPath.row
obtener los valores adecuados para los elementos de la matriz y las posiciones de tap.¿Cómo conseguiste el relleno / espacio extra a la derecha y a la izquierda?
Lo obtuve de la misma manera que agrega espacio a cualquier vista. Usé restricciones de diseño automático. Simplemente use la herramienta pin en el Creador de interfaces para agregar espacio para las restricciones iniciales y finales.
fuente
numberOfSectionsInTableView
yreturn 1
para el número de filas. Luego, useindexPath.section
para obtener el índice de celda actual. Pruébalo una vez. Creo que descubrirá que no necesita hacer muchos cambios en su configuración actual. Esto es definitivamente más fácil que subclasificar.layer
manipulaciones son bastante rápidas. ¿Estás diciendo esto porque notaste un éxito en el rendimiento o como una buena práctica general? Incluso si los configura en una XIB, aún deben configurarse cuando se crea la celda.Mi solución fácil usando Swift :
Resultado
fuente
super.layoutSubviews()
primero para asegurarme de que toda la vista se presentara correctamente antes de configurar su marco.didSet
porselected
variable y llamadalayoutSubviews()
en el interior!La forma en que logro agregar espacio entre celdas es hacer numberOfSections = "Your array count" y hacer que cada sección contenga solo una fila. Y luego defina headerView y su altura.
fuente
Necesitaba hacer el mismo concepto de tener UITableCells tener un "espacio" entre ellos. Como literalmente no puede agregar espacio entre celdas, puede simularlo manipulando la altura de celda de UITableView y luego agregando una UIView a contentView de su celda. Aquí hay una captura de pantalla de un prototipo que hice en otro proyecto de prueba cuando estaba simulando esto:
Aquí hay un código (Nota: hay muchos valores codificados para fines de demostración)
Primero, necesitaba configurar el
heightForRowAtIndexPath
para permitir diferentes alturas en UITableViewCell.A continuación, quiero manipular el aspecto de UITableViewCells, así que lo hago en el
willDisplayCell:(NewsUITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
método.Tenga en cuenta que hice mi whiteRoundedCornerView height 70.0 y eso es lo que causa el espacio simulado porque la altura de la celda es en realidad 80.0 pero mi contentView es 70.0, lo que le da la apariencia.
Puede haber otras formas de lograr esto aún mejor, pero así es como descubrí cómo hacerlo. Espero que pueda ayudar a alguien más.
fuente
Tendrás que configurar el marco a tu imagen. El código no probado es
fuente
layoutSubviews
si está subclasificandoUITableViewCell
UITableViewCell
para obtener el resultado que necesito :) ... La subclasificaciónUITableViewCell
es muy común.UITableViewCell
. Cuando esté creando una costumbreUITableViewCells
, debería estar subclasificandoUITableViewCell
.Yo estaba en el mismo barco. Al principio intenté cambiar a secciones, pero en mi caso terminó siendo más dolor de cabeza de lo que pensaba originalmente, así que he estado buscando una alternativa. Para seguir usando filas (y no meterse con cómo accede a los datos de su modelo), esto es lo que funcionó para mí simplemente usando una máscara :
Todo lo que le queda por hacer es aumentar la altura de la celda en el mismo valor que desea
verticalPadding
, y luego modificar su diseño interno para que cualquier vista que tenga espacio en los bordes de la celda aumente ese mismo espacioverticalPadding/2
. Un inconveniente menor: obtienesverticalPadding/2
relleno tanto en la parte superior como en la parte inferior de tableView, pero puedes solucionarlo rápidamente configurandotableView.contentInset.bottom = -verticalPadding/2
ytableView.contentInset.top = -verticalPadding/2
. Espero que esto ayude a alguien!fuente
Creo que la solución más sencilla si solo busca un poco de espacio y probablemente el más económico sería simplemente establecer el color del borde de la celda en el color de fondo de sus tablas y luego establecer el ancho del borde para obtener el resultado deseado.
fuente
Si aún no está usando encabezados de sección (o pies de página), puede usarlos para agregar un espacio arbitrario a las celdas de la tabla. En lugar de tener una sección con n filas, cree una tabla con n secciones con una fila cada una.
Implementar el
tableView:heightForHeaderInSection:
método para controlar el espaciado.También puede implementar
tableView:viewForHeaderInSection:
para controlar cómo se ve el espaciado.fuente
Lo resolví así en Swift 4.
Creo una extensión de UITableViewCell e incluyo este código:
Espero que te ayude.
fuente
Ejemplo en swift 3 ..
ver el código del controlador es abajo como
func numberOfSections (en tableView: UITableView) -> Int {return arraytable.count}
Descargar la fuente completa a Github: enlace
https://github.com/enamul95/CustomSectionTable
fuente
Se me ocurren tres enfoques:
Cree una celda de tabla personalizada que presente la vista de la celda completa de la manera que desee
En lugar de agregar la imagen a la vista de imagen, borre las subvistas de la vista de imagen, cree una vista personalizada que agregue un UIImageView para la imagen y otra vista, quizás una simple UIView que proporcione el espacio deseado y agréguelo como una subvista de La vista de la imagen.
¿Tiene sentido?
fuente
Sí, puede aumentar o disminuir el espacio (relleno) entre dos celdas creando una vista base en la vista de contenido en la celda. Establezca un color claro para el fondo de la vista de contenido y puede ajustar la altura de la vista base para crear espacio entre las celdas.
fuente
Según la respuesta de Husam: el uso de la capa de celda en lugar de la vista de contenido permite agregar un borde alrededor de la celda completa y el accesorio si es necesario. Este método requiere un ajuste cuidadoso de las restricciones inferiores de la celda, así como de esos insertos, de lo contrario, la vista no será adecuada.
fuente
Cambie el número de filas en la sección a 1. Ha cambiado el número de secciones en lugar del número de filas.
Aquí pones espacio entre filas
fuente
Creo que esta es la solución más limpia:
fuente
layoutMargins
esta manera. Tal vez porque estoy usando autolayout.Este artículo ayudó, es más o menos lo que dijeron las otras respuestas, pero resumir y conciso
https://medium.com/@andersongusmao/left-and-right-margins-on-uitableviewcell-595f0ba5f5e6
En él, solo los aplica a los lados izquierdo y derecho, pero el
UIEdgeInsetsMake
init permite agregar relleno a los cuatro puntos.Tenga en cuenta que UIEdgeInsets también se puede utilizar para lograr lo mismo.
Xcode 9.3 / Swift 4
fuente
No es necesario usar un montón de secciones diferentes. Las otras respuestas usan inserciones de marco y CGRect y capas y ... BLAH. No está bien; use el diseño automático y un UITableViewCell personalizado. En ese UITableViewCell, en lugar de ver su contenido dentro de la vista de contenido, cree una nueva vista de contenedor (una vista de UIV), subvista la vista de contenedor dentro de la vista de contenido, luego subvista todas sus vistas dentro de la vista de contenedor.
Para hacer el espaciado ahora, simplemente edite los márgenes de diseño de la vista del contenedor, así:
fuente
Intente buscar en - (UIEdgeInsets) layoutMargins; en la celda
fuente
Mi situación fue que usé UIView personalizado para ver ForHeader en la sección también heightForHeader en la sección de retorno de altura constante, digamos 40, el problema fue cuando no hay datos, todas las vistas de encabezado se tocaron entre sí. así que quería espacio entre la sección en ausencia de datos, así que lo arreglé simplemente cambiando el plano "estilo de vista de tabla" a "Grupo". Y funcionó para mí.
fuente
Vea mi solución en GitHub con la subclasificación
UITableView
y el uso de las características de tiempo de ejecución de Objective-C.Básicamente utiliza la estructura de datos privados de Apple
UITableViewRowData
que obtuve buscando encabezado de tiempo de ejecución privado deUITableView
:https://github.com/JaviSoto/iOS10-Runtime-Headers/blob/master/Frameworks/UIKit.framework/UITableView.h ,
y aquí está la clase privada deseada que contiene todo lo que necesita para diseñar el espaciado de sus celdas como desee sin configurarlo en las clases de celdas:
https://github.com/JaviSoto/iOS10-Runtime-Headers/blob/master/Frameworks/UIKit.framework/UITableViewRowData.h
fuente
Estaba teniendo problemas para que esto funcione junto con los colores de fondo y las vistas de accesorios en la celda. Terminé teniendo que:
1) Establezca la propiedad de vista de fondo de las celdas con un conjunto UIView con un color de fondo.
2) Vuelva a colocar esta vista en layoutSubviews para agregar la idea de espaciado
fuente
Usar los encabezados como espaciado funcionaría bien, supongo que si no quieres usar ningún encabezado. De lo contrario, probablemente no sea la mejor idea. Lo que estoy pensando es crear una vista de celda personalizada.
Ejemplos:
En la celda personalizada, haga una vista de fondo con restricciones para que no llene toda la celda, dele algo de relleno.
Luego, haga invisible el fondo de la vista de tabla y elimine los separadores:
fuente
Si no desea cambiar la sección y el número de fila de su vista de tabla (como lo hice yo), esto es lo que debe hacer:
1) Agregue un ImageView a la parte inferior de la vista de celda de su tabla.
2) Haga que sea del mismo color que el color de fondo de la vista de tabla.
Lo hice en mi aplicación y funciona perfectamente. ¡Salud! :RE
fuente
SWift-5, espacio entre UITableViewCell
fuente
Simplemente puede usar la restricción en un código como este:
Es importante agregar una subvista (contenedor) y poner otros elementos en ella.
fuente
agregue una vista interna a la celda y luego agregue sus propias vistas.
fuente
Solución Swift 5.0
Dentro de la subclase UITableViewCell
fuente
Utilice UITableViewDelegate
heightForRowAtIndexPath
y devuelva el alto de la fila.fuente