uitableviewcell custom ios objective-c uitableview interface-builder

ios - custom - uitableview swift 4



¿Cómo ajusto el margen izquierdo para las celdas prototipo en un UITableView? (10)

Si creo un UITableViewController , por ejemplo a través de Archivo → Nuevo proyecto ... → iOS → Aplicación Master-Detail en Xcode, se crea un UITableView con una celda prototipo.

La jerarquía de vista generada es:

Se crea UIView un "margen" izquierdo entre el borde izquierdo UIView del contenido de la UIView y el elemento UILabel del texto "Título" como se muestra a continuación en naranja.

Esto da como resultado un margen correspondiente entre el borde de la pantalla del dispositivo y el texto de UILabel en tiempo de ejecución:

Entonces, ¿dónde está establecido el ancho de este espacio y cómo se puede ajustar?

Los controles en el Inspector de tamaño para UILabel están atenuados:

Mi opción preferida sería poder establecer el ancho de esta brecha desde Interface Builder, pero también me gustaría entender dónde se establece esta brecha y cómo modificarla programáticamente.


A partir de iOS 8 está disponible la propiedad de celda layoutMargins . Entonces, la forma correcta de ajustar los márgenes de celda es estableciendo esta propiedad en su tableView:cellForRowAtIndexPath o en su UITableViewCell personalizada de esta manera:

override func awakeFromNib() { super.awakeFromNib() self.layoutMargins = UIEdgeInsetsZero //or UIEdgeInsetsMake(top, left, bottom, right) self.separatorInset = UIEdgeInsetsZero //if you also want to adjust separatorInset }

Espero que esto pueda ayudar a alguien.


Aquí está la versión rápida de la respuesta de Chetan:

override func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) { tableView.separatorInset = UIEdgeInsets.zero tableView.layoutMargins = UIEdgeInsets.zero cell.preservesSuperviewLayoutMargins = false cell.layoutMargins = UIEdgeInsets.zero cell.separatorInset = UIEdgeInsets.zero }


Como mencionó UITableViewCell , la propiedad de indentation UITableViewCell es una excelente manera de sangrar etiquetas de texto en estilos de celda incorporados. Simplemente haga algo como esto para lograr un buen margen izquierdo:

cell.indentationLevel = 2;

Esto, sin embargo, no funcionaría para imageView.


Creo que se me ocurrió una solución fácil. jajaja

La respuesta superior tiene algún problema ... disminuye el espacio izquierdo, pero resulta un espacio derecho.

Usé las restricciones en Interface Builder.

Primero agregue una restricción de margen izquierdo -15 a la Vista de tabla.

Luego agregue un poco de sangría a la celda de la tabla para que el contenido se vea mejor.

Aquí hay algunas fotos paso a paso:

Agrega la restricción. Recuerde desmarcar el "espacio al vecino más cercano".

Las celdas de la tabla se moverán a la izquierda. Pero parece demasiado cerca del margen.

Por lo tanto, elija la celda de tabla y agregue un poco de sangría en el área correcta.


En el "Inspector de atributos" de TableView, configure los recuadros de separación en "Personalizado" con Izquierda = 0. ¡Eso es todo lo que tiene que hacer!


Si está utilizando un xib para su celda, asegúrese de que "Relativo al margen" esté desmarcado. Puede verificar esto a través del inspector como se muestra en la siguiente captura de pantalla:


Simplemente agregue el método en su código como se menciona en el siguiente enlace

¿Cómo elimino el margen en el lado izquierdo de un UITableView, sin crear un espacio a la derecha?

El método es como:

-(void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath{ if ([tableView respondsToSelector:@selector(setSeparatorInset:)]) { [tableView setSeparatorInset:UIEdgeInsetsZero]; } if ([tableView respondsToSelector:@selector(setLayoutMargins:)]) { [tableView setLayoutMargins:UIEdgeInsetsZero]; } if ([tableView respondsToSelector:@selector(setLayoutMargins:)]) { cell.preservesSuperviewLayoutMargins = NO; [cell setLayoutMargins:UIEdgeInsetsZero]; } if ([cell respondsToSelector:@selector(setSeparatorInset:)]){ [cell setSeparatorInset:UIEdgeInsetsZero]; } }


Solo necesita establecer la propiedad contentInset de la vista de tabla. Puede establecer el valor de acuerdo a su necesidad.

self.tableView.contentInset = UIEdgeInsetsMake(0, -15, 0, 0);

RESULTADO DE SALIDA


Vaya a Main.storyboard > seleccione UITableViewCell > Attributes Inspector . Cambie la lista desplegable Separador de Inserciones predeterminadas a Inserciones personalizadas. Cambiar el recuadro izquierdo de 15 a 0


Y si desea cambiar solo el margen izquierdo de la etiqueta de texto de la celda solamente, cambie la Horizontal Space Constraint ''Constant'' para decir 16 u 8 según el relleno que desee (esto está en el archivo de plumín). Si no puede llegar a la ''constante'' Seleccione la etiqueta, cambie la coordenada x en la Vista FrameRectangle y luego haga clic en el pin de restricción a la izquierda)