Qu'est-ce qu'une contrainte 'UIView-Encapsulated-Layout-Width'?

Je continue à get des exceptions 'Impossible de satisfaire simultanément les contraintes' (Xcode 5, iOS 7, à la fois périphérique et simulateur), où l'une des contraintes de la list est quelque chose comme ceci:

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

Je n'ai pas défini cette contrainte moi-même. Ce n'est pas non plus un NSAutoresizingMaskLayoutConstraint . Mais d'où vient-il? Et comment puis-je m'en débarrasser?

Je n'ai aucune idée. Et je ne trouve rien sur 'UIView-Encapsulated-Layout-Width' dans la documentation d'Apple. Même la search Google ne renvoie rien du tout.

Aucune suggestion?

PS: J'utilise cette cellule dans un UICollectionView avec une sous-class personnalisée de UICollectionViewFlowLayout . Peut-être que la partie 'Encapsulated-Layout' a quelque chose à voir avec ça?

Un correctif simple et rapide consiste à atsortingbuer une valeur de priorité de 999 aux contraintes personnalisées ayant une priorité élevée. Les contraintes encapsulées et auto-générées devraient dominer avec une priorité plus élevée que vos contraintes.

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

J'ai joué avec l'échantillon, je pense que ces codes provoquent l'exception Autolayout.

CGFloat height = MAX(0, -y + maxY); ligne 79 dans CSStickyHeaderFlowLayout.m.

Si vous utilisez une valeur statique pour la hauteur de 200, l'exception ne se produira plus. Je ne peux pas comprendre ce qu'est exactement UIView-Encapsulated-Layout, mais il semble que changer dynamicment le cadre UICollectionViewLayoutAtsortingbutes peut causer ce problème. dans le projet exemple, c'est la hauteur, dans le problème de PO, je suppose que c'est la largeur. Peut-être que je peux creuser un peu plus, si vous pensez que cela serait utile

Je peux faire la lumière sur la réponse à la question. Dans mon application OS X, j'ai trouvé une telle contrainte mystérieuse sur la vue de la cellule d'un NSTableView, (c'est-à-dire, un object que j'avais précédemment returnné dans la méthode NSTableViewDelegate -tableView: viewForTableColumn: row). J'avais également envoyé un message setWidth: 0.0 à cette même colonne de table. Changer le paramètre dans ce setWidth: de 0.0 à quelque chose d'autre était reflété dans la valeur constante de la contrainte mystérieuse.

Conclusion: Les contraintes qui se connectent elles-mêmes avec 'UIView-Encapsulated-Layout-Width' ou 'NSView-Encapsulated-Layout-Width' sont causées par la définition de la largeur d'une colonne de tableau, ou quelque chose de similaire.

Je l'ai trouvé avec les versions iOS 10 où j'utilisais les sous-classs UITableViewCell comme vues normales et non comme lignes de table. La cellule limitait son contenu à une largeur nulle.

La solution de contournement que j'ai utilisée consistait simplement à append le contentView à la hiérarchie de vue au lieu de la cellule tableview. J'ai également veillé à conserver la cellule tableView (car elle n'était plus retenue par la hiérarchie de vue elle-même).