with uicollectionviewflowlayoutautomaticsize collection automatic ios uicollectionview autolayout nslayoutconstraint uicollectionviewlayout

ios - uicollectionviewflowlayoutautomaticsize - ¿Qué es una restricción ''UIView-Encapsulated-Layout-Width''?



uicollectionviewcell size (4)

Sigo recibiendo excepciones de "No se pueden cumplir las restricciones simultáneamente" (Xcode 5, iOS 7, dispositivo y simulador), donde una de las limitaciones de la lista es algo como esto:

"<NSLayoutConstraint:0x165b23d0 ''UIView-Encapsulated-Layout-Width'' H:[StoryPlayerCell:0x165affc0(0)]>"

Yo no establecí esta restricción yo mismo. Tampoco es una NSAutoresizingMaskLayoutConstraint . ¿Pero de dónde viene? ¿Y cómo puedo deshacerme de eso?

No tengo idea. Y no puedo encontrar nada sobre ''UIView-Encapsulated-Layout-Width'' en la documentación de Apple. Incluso la búsqueda de Google no arroja nada en absoluto.

¿Alguna sugerencia?

PD: Estoy usando esta celda en un UICollectionView con una subclase personalizada de UICollectionViewFlowLayout . Tal vez la parte ''Encapsulated-Layout'' tiene algo que ver con esto?


Encontré esto con versiones de iOS 10 en las que usaba subclases de UITableViewCell como vistas normales, no como filas de tablas. La celda estaba limitando su contenido a ancho cero.

La solución alternativa que utilicé fue simplemente agregar el contentView a la jerarquía de vista en lugar de la celda de tabla vista. También me aseguré de conservar la celda tableView (ya que la jerarquía de vistas ya no la conservaba).


Puedo arrojar algo de luz sobre la respuesta a la pregunta. En mi aplicación OS X, encontré una restricción tan misteriosa en la vista de celda de un NSTableView, (es decir, un objeto que había devuelto previamente en el método NSTableViewDelegate -tableView: viewForTableColumn: row). También había enviado un mensaje setWidth: 0.0 a esta misma columna de la tabla. Cambiar el parámetro en ese setWidth: de 0.0 a algo más se reflejó en el valor constante de la restricción misteriosa.

Conclusión: Las restricciones que se registran con ''UIView-Encapsulated-Layout-Width'' o ''NSView-Encapsulated-Layout-Width'' son causadas por establecer el ancho de una columna de tabla, o algo similar.


Una solución rápida y agradable es asignar un valor de prioridad 999 a las restricciones personalizadas con alta prioridad. Las restricciones encapsuladas y autogeneradas deben dominar con mayor prioridad que sus restricciones.

https://.com/a/25795758/590010


jugué con la muestra, creo que estos códigos están causando la excepción de Autolayout.

CGFloat height = MAX(0, -y + maxY); línea 79 en CSStickyHeaderFlowLayout.m.

si usa un valor estático para una altura como 200, la excepción ya no ocurrirá. No puedo entender qué es exactamente UIView-Encapsulated-Layout, pero parece que cambiar dinámicamente el marco UICollectionViewLayoutAttributes puede causar ese problema. en el proyecto de muestra, es la altura, en el problema de PO, supongo que es el ancho. Tal vez pueda profundizar un poco más en eso, si crees que sería útil