Un appel " [UIView -systemLayoutSizeFittingSize:]` sur un UITableViewCell échoue toujours
Je veux utiliser l'auto-mise en page pour UITableViewCells. Ces cellules d'un tableau dynamique de la hauteur (en fonction de la longueur du texte).
Je suis en utilisant [UIView -systemLayoutSizeFittingSize:]
pour calculer la cellule appropriée de la hauteur (de retour dans [UITableView -heightForRowAtIndexPath:]
) mais j'obtiens les résultats suivants:
-
Si je passe
UILayoutFittingCompressedSize
, je remonte un CGSize de (0,0). -
Si je passe
UILayoutFittingExpandedSize
, mon application se bloque avec ce message d'erreur:*** Échec d'Assertion dans -[NSISLinearExpression incrementConstant:], /SourceCache/Foundation_Sim/Foundation-1043.1/Layout.subproj/IncrementalSimplex/NSISLinearExpression.m:620
(Je suppose que cela signifie que certaines nombre est infini.)
Mon application est simple. - Je calculer la hauteur pour chaque objet, puis de les mettre en cache:
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)
Je fais l'hypothèse que c'est un problème avec les contraintes que je me suis fixés, mais:
- Si je régler manuellement
cellHeight
pour une grande valeur, les cellules ont toutes l'air très bien, sauf la hauteur est faux. - Interface Builder me donne pas de mises en garde à propos ambigus restrictions
[cell hasAmbiguousLayout]
retourneNO
.- Ma cellule a, entre autres choses, un ensemble d'images à 48x48, donc une taille de (0, 0) ne devrait pas satisfaire toutes les contraintes.
Des idées?
- Je rencontre le même bug que votre, avez-vous résoudre ce problème ?
Vous devez vous connecter pour publier un commentaire.
C'est ce qui fonctionne pour moi (note contentView')
EDIT: j'ai répondu à une question similaire, et a fourni un exemple complet, ici:
Comment redimensionner superview pour s'adapter à tous les sous-vues avec mise en page automatique?
Il est difficile de dire quelque chose de concret en se basant sur votre post, parce que vous ne publiez pas les contraintes que vous utilisez.
La Documentation D'Apple:
Peut-être que vous avez créé des contraintes qui peuvent être interprétés dans le sens de la taille de la cellule est égale à (0,0).
Il y a une autre façon, vous pouvez vérifier la hauteur de la cellule avec le texte. Vous pouvez mettre votre texte dans la UITextView et puis:
Il est important de définir le texte et la police (et de tous les autres biens qui peuvent provoquer le changement de la hauteur de la UITextView) de la UITextView avant d'utiliser contentSize de la propriété. Aussi, vous devez d'abord ajouter UITextView à la vue.
//////EDIT
Le problème avec votre approche avec l'aide de contraintes peut être que vous voulez mesurer la cellule qui N'est PAS ajouté à la vue de sorte que le système ne possède pas toutes les informations dont il a besoin. Il ne sait pas de combien d'espace qui sera pour l'espace, etc, car il ne connait pas les environs de la cellule
[NSString -sizeWithFont: constrainedToSize:]
, mais la même idée de base). Mon UITableViewCell contient une sous-vue, une UIImageView, avec quatre contraintes (hauteur = 48, largeur = 48, espace de conteneur = 10, en haut de l'espace de conteneur = 10). Ne pourrait-il pas à lui seul fairesystemLayoutSizeFittingSize:
retour, au minimum, (58, 58)?