working uitableviewcell not ios uitableview autolayout uilabel
aquí

ios - uitableviewcell - uitableviewautomaticdimension not working



UITableCell con distribución automática UILabel de líneas múltiples configurada se trunca (1)

Estoy luchando para que algunas etiquetas multilínea se comporten dentro de las celdas de tabla vista. Ya me alejé de las pilas que no funcionaron de manera confiable como se describe en esta pregunta

UILabel dentro de UIStackViews anidadas dentro de UITableViewCell a veces truncando

He corregido uno de mis puntos de vista con la ayuda de los comentarios sobre esa pregunta, pero otra vista simplemente no me funciona, incluso después de pasar a una configuración de autolayout que no es stackview. Luego terminé moviendo la celda en la que no pude trabajar a la vista que funcionaba con un diseño similar y llegué a un punto donde tengo dos celdas en la misma vista, una que funcionó y otra que no. Exporté esto a una nueva aplicación de prueba que cargué aquí

En esta aplicación hay una tabla de vista simple con 2 celdas dentro de ella. Una celda muestra el texto grande de líneas múltiples correctamente y expande la celda según sea necesario. La otra celda se detiene y trunca la etiqueta multilínea como puede ver aquí

Las dos celdas para mí parecen bastante idénticas en sus restricciones, así que estoy muy confundido sobre por qué uno funciona y el otro no. Aquí hay una descripción general de sus limitaciones

Hay algunas restricciones no instaladas, ya que he estado experimentando tratando de descubrir qué está causando que una de las células no funcione.

Si alguien pudiera explicarme qué causa que estas dos células no se comporten igual, o más importante, por qué una de las etiquetas no llena su celda de la tabla, sería muy apreciada ya que he pasado horas buscando y simplemente puedo '' Parece que lo resuelve.

¡Aclamaciones!


Editar:

Para explicar qué salió mal en primer lugar ...

La "etiqueta de etiquetas" del lado derecho en Cell2 tiene un Preferred Width = 300 explícito Preferred Width = 300 . No conozco las partes internas, por lo que no puedo decir exactamente lo que está sucediendo, pero me da la impresión de que Auto-Layout tendrá en cuenta ese valor de Preferred Width al calcular la altura del cuadro delimitador de texto, y luego continuará con restricciones, contenido , tamaño intrínseco, etc.

Simplemente desmarcar esa opción explícita solucionará el problema.

Respuesta Original:

Me resultó más fácil comenzar una nueva Célula desde cero, en lugar de tratar de modificar las restricciones que había establecido, así que ... Es de esperar que esto sea ​​reproducible.

Preparación: Agregar nueva clase "Cell3"; hacer modificaciones básicas al código para acomodar Cell3. También me resulta más fácil si realizo algunas variables para los valores de las etiquetas y establezco los colores de fondo de los elementos para facilitar la inspección visual y las pruebas.

Paso 1: agrega un nuevo prototipo; fondo morado; TableViewCell3 class y "Cell3" reuse ID; estírelo verticalmente para que sea lo suficientemente alto para trabajar (no afectará la altura del tiempo de ejecución).

Paso 2: agrega una UIView para las etiquetas del lado izquierdo. Leading = 8 a Supervisión. Width = 200 ; Height = 100 ; Centrar verticalmente. Los valores de Altura y Ancho serán cambiados más tarde.

Paso 3: Agregue las dos etiquetas del lado izquierdo - 1 y 2 (fuente del cuerpo) - a la UIView . Restringir 1 Left = 0 ; Top = 0 . Restringir 2 Left = 0 ; Bottom = 0 .

Paso 4: Agregue una restricción de espaciado vertical de 2 a 1 de 7.5 y cambie la restricción de Altura de UIView a >= 20 (el tiempo de ejecución probablemente siempre excederá 20).

Paso 5: Cambie la restricción de ancho de UIView a >= 40 (el tiempo de ejecución probablemente siempre excederá 40); Agregue restricciones de Trailing Space to Container para ambas etiquetas del lado izquierdo y configúrelas como >= 0 .

Paso 6: Agregue las restricciones superior e inferior "a supervisión" a UIView de >= 0 .

Paso 7: Agregue la etiqueta del lado derecho (letra de título 1, número de líneas 0). Limitar Top >= 0 , Right = 0 , Bottom >= 0 , todo a Superview; también Centro Verticalmente.

Paso 8: Agregue una restricción de espaciado horizontal desde la etiqueta del lado derecho a UIView, establezca en 20 . Otorgue a la etiqueta del lado derecho una restricción de ancho = 40 (el tiempo de ejecución siempre será superior a 40) y establezca la prioridad en 250 . Esto permite que UIView contiene las etiquetas del lado izquierdo controle los anchos.

Paso 9: Asigna IBOutlets y ejecuta la aplicación. Intenta cambiar el texto. Haga que las etiquetas del lado izquierdo sean más cortas o más largas ... intente configurar la etiqueta del lado derecho a solo el texto suficiente para una línea ... etc.

En este punto, las cosas deberían quedar muy bien, hasta que ... pongas demasiado texto en una de las etiquetas del lado izquierdo, en ese punto tendrás una etiqueta del lado derecho muy, muy estrecha y muy alta. Asi que...

Paso 10: Agregue otra restricción de ancho a UIView y ajústelo a <= 200 . Dependiendo de su contenido real, es posible que desee modificar eso, o quizás establecerlo en <= en un porcentaje del ancho de la celda.

Actualicé mi repositorio original de GitHub para que pueda verificarlo. Debería tener un compromiso para cada "paso" enumerado anteriormente, lo que podría facilitar el seguimiento: https://github.com/DonMag/CellTest2

Resultados: