uitableview autolayout

uitableview - UIView-Encapsulated-Layout-Width/Height restringido a cero



autolayout (1)

Hay una serie de preguntas de desbordamiento de pila sobre el diseño UITableView celdas de UITableView y encabezados / pies de página que se refieren a las UIView-Encapsulated-Layout-Width que utiliza UITableView para que sus componentes tengan el tamaño correcto:

  • ¿Qué es NSLayoutConstraint "UIView-Encapsulated-Layout-Height" y cómo debo hacer para forzarlo a recalcular limpiamente?
  • iOS 8.3 ''UIView-Encapsulated-Layout-Width'' en el teclado personalizado
  • Diseño automático: ¿Qué crea restricciones denominadas UIView-Encapsulated-Layout-Width & Height?
  • ¿Qué es una restricción ''UIView-Encapsulated-Layout-Width''?

El propósito de estas restricciones parece bastante claro: permiten que UITableView y también UICollectionView interactúen con el diseño de restricciones y pasen sus especificaciones sobre cómo deben ser las celdas grandes (y otros componentes).

La mayoría de los problemas parecen ser que las personas tienen un conjunto de restricciones requeridas que son incompatibles con estas restricciones de encapsulación que también requieren un tamaño de 0 . Las respuestas más viables parecen ser reducir la prioridad de las restricciones definidas por el usuario a 999 para que el marco pueda anularlas.

Sin embargo, lo que me interesa entender es por qué UITableView requiere un ancho de 0 para una de sus vistas. ¿Es esto un error? ¿O es un resultado de uso incorrecto? ¿O tiene perfecto sentido?

Las restricciones de altura de 0 veces tienen sentido, si las celdas se expanden de la nada. Reducir las prioridades es una buena manera de manejar esto. Pero ¿por qué las celdas obtendrían un ancho de 0 ?


UIView no tiene el tamaño intrínseco, por lo que se requieren restricciones de ancho y altura. UIVollectionView / UITableView crea inicialmente UIView-Encapsulated-Layout-Width y UIView-Encapsulated- Heightout. Y más adelante establece la constante de restricción basada en el método delegado sizeForItem o heightForRowAtIndexPath. Para asegurar que UICollectionViewCell / UITableViewCell creado en el método cellForItem / cellForRow tendrá el tamaño exacto.