El diseño automático se ignora en Custom UITableViewCell

93

A pesar de haber establecido restricciones para todos los elementos, incluidos los verticales necesarios para que la celda calcule su altura, el diseño automático parece ignorarse: todas las celdas están comprimidas.

Aquí hay una captura de pantalla del resultado y de las restricciones en el guión gráfico. ingrese la descripción de la imagen aquí

ingrese la descripción de la imagen aquí

En el VC que contiene tableView, aquí está el código en viewDidLoad:

tableView.estimatedRowHeight = 120.0
tableView.rowHeight = UITableViewAutomaticDimension

Al comentar la segunda línea, se obtienen celdas con una altura de 120.0, pero también se ignora el diseño automático.

Gracias


Actualizar

Para simplificar la interfaz, dejé una sola etiqueta con, como restricciones:

  • Espacio líder para supervista
  • Espacio superior para supervista
  • Ancho y alto fijos (100 y 100)
  • Espacio inferior al margen del contenedor para asegurarse de que la celda tenga todas las restricciones verticales para determinar su altura

Y con esta interfaz simplificada, el diseño automático aún no se tiene en cuenta, lo que me sugiere que el problema no provino de restricciones mal establecidas.

En el Inspector de tamaño, la altura de la fila se establece en 120 y se marca Personalizado. La celda tiene la clase personalizada correcta, el identificador de reutilización de celda es correcto.


Actualización: solución encontrada

Este fue un simple error, vea mi respuesta a continuación.

Kqtr
fuente
Verifique su terminal de depuración: ¿hay algún registro de NSLayoutConstraint que sugiera que algo no está funcionando como se esperaba?
Matthew Hallatt
No aparece nada en la terminal de depuración @MatthewHallatt, gracias.
Kqtr
@Kqtr intente comentar estas dos líneas y luego ejecútelo normalmente una vez para verificar si hay algún cambio.
Tushar Sharma
@TusharSharma Comentar las dos líneas tiene el mismo efecto que comentar solo la línea rowHeight: la celda tiene una altura de 120,0, pero el diseño automático no funciona.
Kqtr
1
¿El constructor de interfaces muestra alguna restricción como falta o ambigua? Busque el pequeño signo de exclamación amarillo o rojo.
Matthew Hallatt

Respuestas:

250

Se ignoró el diseño automático porque tanto la celda prototipo como la vista UIV de la celda recibieron la clase de celda personalizada en IB.

Volver a establecer UIView en la clase UIView resolvió el problema.

solo para ser muy claro

Kqtr
fuente
2
Estuve atrapado en este problema durante horas y esto lo resuelve, ¡gracias!
candidev
Perdí casi todo el día hasta que vine aquí .... Mil gracias a ti.
Renascent
-3

Creo que el problema es que estás implementando:

func tableView(_ tableView: UITableView, heightForRowAt indexPath: 
IndexPath) -> CGFloat {

 return x
}

Debe eliminar esta función para que la vista de tabla calcule su altura automática para las celdas.

Jaafar Barek
fuente
Gracias, desafortunadamente no lo anulo: en realidad ni siquiera tengo un delegado para este tableView, solo una fuente de datos.
Kqtr
¿Estableció las restricciones de vista de texto en todos los bordes de la celda? ¿Y desactivaste el desplazamiento de textView?
Jaafar Barek
La etiqueta de varias líneas (0 líneas) tiene restricciones para 1) espaciado vertical con el número a su izquierda 2) espacio superior a supervista 3) espacio final a supervista y 4) espacio inferior con la etiqueta Asked By.
Kqtr