He estado trabajando en esto durante aproximadamente 2 días, así que pensé en compartir mis aprendizajes con ustedes.
La pregunta es: ¿Es posible reducir el ancho de una celda en un UITableView agrupado?
La respuesta es no.
Pero hay dos formas de solucionar este problema.
Solución n. ° 1: una tabla más delgada Es posible cambiar el marco de tableView para que la tabla sea más pequeña. Esto dará como resultado que UITableView renderice la celda interior con el ancho reducido.
Una solución para esto puede verse así:
-(void)viewWillAppear:(BOOL)animated
{
CGFloat tableBorderLeft = 20;
CGFloat tableBorderRight = 20;
CGRect tableRect = self.view.frame;
tableRect.origin.x += tableBorderLeft; // make the table begin a few pixels right from its origin
tableRect.size.width -= tableBorderLeft + tableBorderRight; // reduce the width of the table
tableView.frame = tableRect;
}
Solución # 2: tener celdas renderizadas por imágenes
Esta solución se describe aquí: http://cocoawithlove.com/2009/04/easy-custom-uitableview-drawing.html
Espero que esta información le sea útil. Me tomó alrededor de 2 días probar muchas posibilidades. Esto es lo que quedó.
fuente
Respuestas:
Una forma mejor y más limpia de lograr esto es subclasificar UITableViewCell y anular su
-setFrame:
método de esta manera:¿Por qué es mejor? Porque los otros dos son peores.
Ajustar el ancho de la vista de la tabla en
-viewWillAppear:
En primer lugar, esto no es confiable, la supervista o el controlador de vista principal pueden ajustar el marco de la vista de la tabla más allá de la
-viewWillAppear:
llamada. Por supuesto, puede subclasificar y anular-setFrame:
para su UITableView tal como lo hago aquí para UITableViewCells. Sin embargo, la subclasificación de UITableViewCells es una forma muy común, ligera y de Apple.En segundo lugar, si su UITableView tiene backgroundView, no desea que su backgroundView se reduzca juntos. Mantener el ancho de backgroundView mientras se reduce el ancho de UITableView no es un trabajo trivial, sin mencionar que expandir las subvistas más allá de su supervista no es algo muy elegante para hacer en primer lugar.
Representación de celda personalizada para simular un ancho más estrecho
Para hacer esto, debe preparar imágenes de fondo especiales con márgenes horizontales y debe diseñar las subvistas de las celdas usted mismo para acomodar los márgenes. En comparación, si simplemente ajusta el ancho de toda la celda, el tamaño automático hará todo el trabajo por usted.
fuente
Para hacer esto en Swift, que no proporciona métodos para establecer variables, tendrá que anular el establecedor para
frame
. Publicado originalmente (al menos donde lo encontré) aquífuente
Si nada funciona, puedes probar esto
Haga que el color de fondo de la celda sea un color claro y luego coloque una imagen de la celda con el tamaño requerido. Si desea mostrar algo de texto en esa celda, coloque una etiqueta sobre la imagen. No olvide establecer el color de fondo de la etiqueta también en color claro.
fuente
Descubrí que la solución aceptada no funcionaba con la rotación. Para lograr UITableViewCells con anchos fijos y márgenes flexibles, acabo de adaptar la solución anterior a lo siguiente:
El método se llama siempre que el dispositivo gira, por lo que las celdas siempre estarán centradas.
fuente
Hay un método que se llama cuando se gira la pantalla: viewWillTransitionToSize
Aquí es donde debes cambiar el tamaño del marco. Ver ejemplo. Cambie las coordenadas del marco según sea necesario.
fuente
lo hago en
Y esto funcionó para mi
fuente
En el archivo .h agregue el delegado 'UITableViewDataSource'
fuente