ios cocoa-touch uitableview interface-builder autolayout

ios - Llamar `[UIView-systemLayoutSizeFittingSize:]` en un UITableViewCell siempre falla



uitableview dynamic height (2)

Es difícil decir algo concreto basándose en tu publicación porque no publicaste las restricciones que utilizaste. Documentación de Apple:

systemLayoutSizeFittingSize:

Devuelve el tamaño de la vista que satisface las restricciones que mantiene.

Tal vez creó restricciones que pueden interpretarse de la misma manera que el tamaño de la celda es igual a (0,0).

Hay otra forma de verificar la altura de la celda con el texto. Puedes poner tu texto en el UITextView y luego:

UITextView textView; textView.text = @"l"; textView.font = [UIFont fontWithName:FONT_NAME size:FONT_SIZE]; //some code here // CGFloat cellHeight = textView.contentSize.height;

Es importante establecer el texto y la fuente (y todas las demás propiedades que pueden causar el cambio de altura del UITextView) de la UITextView antes de usar la propiedad contentSize. También debe agregar primero UITextView a la vista.

////// EDITAR

El problema de su enfoque con el uso de restricciones puede ser que desee medir la celda que NO se agregó a la vista para que el sistema no tenga todas las informaciones que necesita. No sabe cuánto espacio habrá para el espacio, etc. porque no conoce el área circundante de la celda.

Quiero usar el diseño automático para UITableViewCells. Estas celdas de tabla tienen una altura dinámica (dependiendo de la longitud del texto).

Estoy usando [UIView -systemLayoutSizeFittingSize:] para calcular la altura de celda adecuada (para regresar en [UITableView -heightForRowAtIndexPath:] ) pero sigo obteniendo los siguientes resultados:

  • Si paso UILayoutFittingCompressedSize , UILayoutFittingCompressedSize un CGSize de (0,0).

  • Si paso UILayoutFittingExpandedSize , mi aplicación se bloquea con este error:

    *** Fallo de afirmación en - [NSISLinearExpression incrementConstant:], /SourceCache/Foundation_Sim/Foundation-1043.1/Layout.subproj/IncrementalSimplex/NSISLinearExpression.m:620

(Supongo que esto significa que algún número es infinito).

Mi implementación es simple. Calculo la altura de cada objeto y luego lo guardo en caché:

MessageCell *cell = // allocate a new cell... // set up the cell (assign text, images, etc) CGSize size = [cell systemLayoutSizeFittingSize:UILayoutFittingCompressedSize]; self.cellHeight = size.height; // size always equals (0, 0)

Supongo que este es un problema con las restricciones que establezco, pero:

  • Si configuro manualmente cellHeight a un valor alto, todas las celdas se ven bien, excepto que la altura es incorrecta.
  • Interface Builder no me advierte sobre restricciones ambiguas
  • [cell hasAmbiguousLayout] devuelve NO .
  • Mi celda tiene, entre otras cosas, una imagen establecida en 48x48, por lo que un tamaño de (0, 0) no debería satisfacer todas las restricciones.

¿Algunas ideas?