2014-09-21 4 views
0

J'essaie actuellement de comprendre ce que je fais de mal avec la mise en page UITableViewCell basée sur les contraintes suivante (iOS 8).Veuillez m'expliquer le comportement de mise en page automatique suivant

Ma cellule est disposé comme le montre cette image:

enter image description here

Il y a une vue de l'image sur la gauche, une étiquette à droite, et les deux devraient être en contact avec les marges cellulaires partout. L'image a une taille fixe (64x64), la hauteur de l'étiquette sera toujours plus petite que cela. Je veux que la taille de l'image fasse que la cellule augmente la hauteur jusqu'à la valeur correcte (hauteur de l'image + marge 2 *).

Le problème est le suivant: J'ai trois contraintes pour la taille verticale, V[Image(64)], Reset.bottom == UITableViewCellContentView.bottomMargin et Reset.top == UITableViewCellContentView.topMargin (toutes définies via le storyboard). Quand j'affiche la cellule, j'obtiens une erreur de contraintes insatisfiable. La contrainte UIView-Encapsulated-Layout-Height interfère avec mes contraintes et la mise en forme automatique casse la contrainte de hauteur de ma vue d'image. Tout a l'air comme il se doit, mais je n'aime pas les erreurs à l'exécution.

Si je donne à ma contrainte de hauteur la priorité 999, tout va bien, pas d'erreurs. Donc, d'après ce que je comprends, ma contrainte de hauteur sera brisée dans les deux cas au moment de l'exécution.

Mais lorsque je supprime complètement la contrainte de hauteur, l'image s'affiche à sa hauteur d'origine (le fichier a une résolution différente de celle affichée dans la cellule). Pourquoi est-ce, ou qu'est-ce que je me trompe ici?

Modifier/Mettre à jour: Je viens de remarquer que j'avais tort sur tout ce qui fonctionnait. L'affichage initial de ma cellule est bien, mais lorsque la cellule change (dans mon cas je déplace une autre simple ligne, cellule en dessous), ma cellule change sa hauteur à la hauteur par défaut de la ligne (44 pts), écrasant l'image Dans le processus. Cela arrive dans les deux cas, quand la mise en page automatique brise mes contraintes ou quand je réduis la priorité de la hauteur à 999. Je ne sais vraiment pas comment faire pour que ces cellules fassent ce que je veux.

+0

ont-ils quelque chose de nouveau dans iOS 8 et vous pouvez maintenant redimensionner la table cellule de vue de la cellule elle-même? – Artem

+0

Oui, il y a quelque chose à propos des hauteurs de cellules dynamiques. Cela fait partie du plan autolayout-for-everything, je pense. Fondamentalement, 'tableView: heightForCellAtIndexPath' ne devrait plus être nécessaire. – Kolja

+0

Si c'est le cas, il doit être comme plusieurs fois plus rapide que dans iOS 7. J'ai utilisé autolayout dans les cellules (même lorsque 'tableView: heightForCellAtIndexPath' renvoie la même valeur) et il était lentement lent. – Artem

Répondre

0

Vous devriez essayer de régler la estimatedRowHeight propriété dans le code, et aussi, selon la version d'iOS 6 que vous utilisez, définissez la propriété rowHeight à UITableViewAutomaticDimension,

self.tableView.estimatedRowHeight = 44; 
self.tableView.rowHeight = UITableViewAutomaticDimension; 

Le rowHeight par défaut pour nib ou story-board vues de table, est supposé être changé en UITableViewAutomaticDimension à un certain point; Je ne sais pas si elle est encore en 6.0.1, donc cette dernière ligne peut être nécessaire ou non.

+0

Désolé, je suppose que j'aurais dû mentionner que j'ai essayé ces deux lignes (dans viewDidLoad), en vain. En outre, j'utilise Xcode 6.1 Beta si cela change quelque chose. – Kolja

0

Soutenez-vous une ancienne version d'iOS? Si c'est le cas, assurez-vous de décocher l'option Relative to margin pour les contraintes qui se plaignent.

enter image description here

+0

J'ai décidé qu'apprendre la nouvelle façon de faire quelque chose tout en conservant la rétrocompatibilité avec quelque chose dont je n'avais qu'une demi-connaissance était trop pour moi, donc je ne supporte que iOS 8. Toutes les contraintes où un élément appartient à la vue d'ensemble est relative à la marge. – Kolja

Questions connexes