J'ai un UITableView fonctionnant sous iOS8 Beta4 je suis en utilisant automatique de la hauteur de cellule à partir de contraintes dans un storyboard.
Un de mes cellules contient une seule UITextView et j'ai besoin d'elle pour se contracter et se dilater en fonction de l'entrée utilisateur - tapez pour réduire/agrandir le texte.
Je fais cela par l'ajout d'un moteur d'exécution de la contrainte à l'affichage de texte et de la modification de la constante de la contrainte en réponse à des événements de l'utilisateur:
-(void)collapse:(BOOL)collapse; {
_collapsed = collapse;
if(collapse)
[_collapsedtextHeightConstraint setConstant: kCollapsedHeight]; // 70.0
else
[_collapsedtextHeightConstraint setConstant: [self idealCellHeightToShowFullText]];
[self setNeedsUpdateConstraints];
}
Whenver le faire, je l'envelopper dans de la tableView mises à jour et l'ensemble de la tableView besoins updateConstraint:
[tableView beginUpdates];
[_briefCell collapse:!_showFullBriefText];
[tableView setNeedsUpdateConstraints];
// I have also tried
// [self.tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationTop];
// with exactly the same results.
[tableView endUpdates];
Quand je fais cela, mon cellulaire ne se développer (et de l'anime, tout en le faisant) mais je reçois des contraintes d'avertissement:
2014-07-31 13:29:51.792 OneFlatEarth[5505:730175] Unable to simultaneously satisfy constraints.
Probably at least one of the constraints in the following list is one you don't want. Try this: (1) look at each constraint and try to figure out which you don't expect; (2) find the code that added the unwanted constraint or constraints and fix it. (Note: If you're seeing NSAutoresizingMaskLayoutConstraints that you don't understand, refer to the documentation for the UIView property translatesAutoresizingMaskIntoConstraints)
(
"<NSLayoutConstraint:0x7f94dced2b60 V:[UITextView:0x7f94d9b2b200'Brief text: Lorem Ipsum i...'(388)]>",
"<NSLayoutConstraint:0x7f94dced2260 V:[UITextView:0x7f94d9b2b200'Brief text: Lorem Ipsum i...']-(15)-| (Names: '|':UITableViewCellContentView:0x7f94de5773a0 )>",
"<NSLayoutConstraint:0x7f94dced2350 V:|-(6)-[UITextView:0x7f94d9b2b200'Brief text: Lorem Ipsum i...'] (Names: '|':UITableViewCellContentView:0x7f94de5773a0 )>",
"<NSLayoutConstraint:0x7f94dced6480 'UIView-Encapsulated-Layout-Height' V:[UITableViewCellContentView:0x7f94de5773a0(91)]>"
)
Will attempt to recover by breaking constraint
<NSLayoutConstraint:0x7f94dced2b60 V:[UITextView:0x7f94d9b2b200'Brief text: Lorem Ipsum i...'(388)]>
388 est mycalculated hauteur des autres contraintes sur la UITextview de la mine à partir de Xcode/IB.
La dernière, c'est de me tracasser - je suppose qu' UIView-Encapsulated-Layout-Height
est calculé à hauteur de la cellule quand il s'est rendu pour la première fois - (j'ai mis mon UITextView hauteur >= 70.0) howevcer il ne semble pas juste que cette dérivée contrainte puis annule une mise à jour de l'utilisateur cnstraint.
Pire encore, bien que la mise en page de code dit que c'est en essayant de me casser la hauteur de la contrainte, il n'a pas - il va à recalculer la hauteur de la cellule et tout attire comme je le voudrais.
Alors, qu'est-ce que NSLayoutConstraint "UIView-Encapsulé-Mise en page-Hauteur" (je suppose que c'est la taille calculée pour automatique de la cellule de dimensionnement) et comment dois-je le forcer à recalculer proprement?