ios - example - Coincidencia de alineación izquierda de tipos personalizados y estándar de UITableViewCell
uitableviewcell styles (4)
UITableViewCell
s personalizado en un guión gráfico. También estoy usando algunas de las celdas de estilo estándar incorporadas. Necesito establecer restricciones para que mis celdas personalizadas coincidan con las plataformas definidas (tienen sus títulos alineados correctamente a la izquierda).
Me di cuenta de que la alineación izquierda de las celdas cambia entre las versiones de iOS y el dispositivo en el que se ejecuta. Parece que la alineación izquierda es la misma que el separatorInset
células predeterminado.
Aquí está UITableViewCell
s UITableViewCell
para algunos dispositivos y versiones de iOS:
- iPad en 7 - 15 puntos.
- iPad en 8 - 20 puntos.
- iPhone en 7 - 15 puntos.
- iPhone en 8 - 16 puntos.
Otros dispositivos (iPhone 6+, iPad Mini) podrían ser diferentes, no he verificado exhaustivamente.
¿Cómo podría asegurarse de que las celdas personalizadas y las celdas integradas tengan la misma alineación izquierda de sus etiquetas?
¿Existe alguna forma sensata de obtener estos valores predeterminados de inserción y utilizarlos en restricciones de diseño automático configuradas en un guión gráfico? ¿Qué tal en el código?
En iOS8 Apple presentó layoutMargins
Puedes configurarlo en tu guión gráfico o en tu código simplemente así:
cell.layoutMargins = UIEdgeInsetsZero // change by your custom value
Antes de eso, debe establecer preservesSuperviewLayoutMargins
en NO para evitar que la celda herede la configuración de márgenes de la vista de tabla
preserveSuperviewLayoutMargins : valor booleano que indica si la vista actual también respeta los márgenes de su supervista.
Espero que esto le pueda ayudar ;)
Estaba teniendo el mismo problema, pero la otra respuesta no pudo ayudarme ya que estaba usando celdas estáticas en UITableViewController. Después de algunas pruebas y errores, finalmente encontré una manera de resolver el problema separatorInset
en iPhone 6+ sin una sola línea de código.
Simplemente alineo el borde izquierdo de UILabel con el valor de 0 [Vista de contenido (distancia actual = 0)] desde el margen izquierdo. Y también cambie la posición X de UILabel para obtener 0. (Para mi caso, en Interface Builder, el margen fue 7, X de UILabel = 8). La alineación funciona bien en iPhone 4S, 5S, 6 y 6+.
EDITAR: Esto cambió en XCode 7. Paso adicional: Establezca "Conservar márgenes de Superview" del TableViewCell
la celda respectiva y su contentView
en TRUE o contentView
en IB -> Size Inspector. Consulte la respuesta de @ tebs1200.
Espero que esto ayude.
Lo que funcionó para mí fue agregar estas 2 líneas a mi implementación personalizada de UITableViewCell
:
self.preservesSuperviewLayoutMargins = YES;
self.contentView.preservesSuperviewLayoutMargins = YES;
// ... add test view to content view...
Luego usé Diseño automático con el espaciado predeterminado:
[self.contentView addConstraints:[NSLayoutConstraint
constraintsWithVisualFormat:@"H:|-[testView]-|" options:0 metrics:nil
views:@{@"testView":testLabel}]];
[self.contentView addConstraints:[NSLayoutConstraint
constraintsWithVisualFormat:@"V:|-[testView]-|" options:0 metrics:nil
views:@{@"testView":testLabel}]];
Puede implementar la solución sugerida por Mark puramente en el guión gráfico:
Asegúrese de que la celda personalizada esté seleccionada.
Asegúrese de que la opción Conservar márgenes de Superview esté seleccionada en el inspector de Tamaño
Ahora selecciona la vista de contenido de la celda
Asegúrate de que la opción Conservar márgenes de Superview también esté seleccionada aquí (ver imagen en el paso 2).
- Seleccione la etiqueta (u otra vista) en su celda de prototipo personalizado.
Restrinja su margen izquierdo 0 píxeles desde el margen.