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!
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)