teclado - restricciones ios 12
La restricción de filas del cambio de tamaño automático de UITableView se rompe misteriosamente en iPhone 6Plus (3)
Tengo un UITableViewCell personalizado que tiene una miniatura y un montón de texto. La altura de la fila se configura para calcularse automáticamente usando
tableView.estimatedRowHeight = 129;
tableView.rowHeight = UITableViewAutomaticDimension
La altura de la fila se debe calcular exactamente como 138 puntos. Todo se ve muy bien en el iPhone 5. Sin embargo, en el iPhone 6 Plus, la altura automática de fila falla INTERMITENTEMENTE para filas aleatorias con el siguiente registro.
(
"<NSLayoutConstraint:0x17009ddd0 V:|-(20)-[scoop.ThumbnailImage:0x124d2a5a0] (Names: ''|'':UITableViewCellContentView:0x124e23200 )>",
"<NSLayoutConstraint:0x17009de70 UITableViewCellContentView:0x124e23200.bottomMargin == scoop.ThumbnailImage:0x124d2a5a0.bottom + 20>",
"<NSLayoutConstraint:0x17009e780 V:[scoop.ThumbnailImage:0x124d2a5a0(90)]>",
"<NSLayoutConstraint:0x17009ef00 ''UIView-Encapsulated-Layout-Height'' V:[UITableViewCellContentView:0x124e23200(138.333)]>"
)
La última línea del registro parece indicar que, por alguna razón, la altura de la fila se calculó como 138.333 en lugar de 138 . Me he estado golpeando la cabeza por un tiempo, pero no puedo entender por qué sucede esto. ¿Puede ayudarme alguien, por favor?
Actualización: Así es como se ve mi celda de vista de tabla.
ACTUALIZACIÓN No pude obtener el código del repositorio principal ya que es parte de un proyecto más grande. Pero he logrado reproducir el problema con un proyecto sano muy simple. Por favor, encontrarlo aquí en github .
0.333 en una pantalla de escala 3x (que es iPhone 6+) probablemente esté conectado con el separador de celdas.
Tenga en cuenta que sus restricciones no configuran el tamaño de la celda, sino que configuran el tamaño de contentView
. Pero la celda tiene que agregar 2 píxeles (= 0.666 puntos) a la altura de la celda para el separador de celda. Autolayout intenta mantener las posiciones de vista en los límites de enteros, por lo que agregar 0.666 puntos a la altura de la celda puede resultar en agregar 0.333 a la altura de tu contenido.
Puede evitar el error configurando los separadores de tabla en None
. Aunque configurar una de las prioridades a 999 (generalmente la prioridad más baja) como la otra answer ha sugerido es una buena solución en general.
La advertencia le dice exactamente cuál es el problema, pero es posible que no se dé cuenta. Las primeras tres restricciones son para una imagen de 90 píxeles de alto, 20 píxeles por debajo de la parte superior de su contenedor y 20 píxeles por encima del margen inferior de su contenedor. Eso es 130, y eso no es compatible con la cuarta restricción, que quiere una altura total de 138. Sin embargo, debido a que la restricción del borde inferior es relativa al margen del contenedor, eso agrega un cierto número de píxeles más. Quite la restricción de altura total (mi recomendación) o cambie las cantidades de borde superior e inferior.