J'essaie d'ajuster la hauteur de cellule pour l'une des cellules de ma vue de table. J'ajuste la taille à partir du paramètre "hauteur de ligne" à l'intérieur de "l'inspecteur de taille" de la cellule en question. Lorsque j'exécute l'application sur mon iPhone, la taille par défaut de la cellule est définie à partir de la "taille de ligne" dans la vue du tableau.
Si je modifie la "taille de ligne" de la vue tableau, la taille de toutes les cellules change. Je ne veux pas faire cela car je veux une taille personnalisée uniquement pour une cellule. J'ai vu beaucoup de messages qui ont une solution programmatique au problème, mais je préférerais le faire via le storyboard, si cela est possible.
la source
UITableView
contenu deDynamic Prototypes
laStatic Cells
, je l' ai fait, et mon projet tout fait sauter .. presque moi - même a été tué.Si vous utilisez UITableViewController, implémentez cette méthode:
Dans la fonction d'une ligne, vous pouvez choisir la hauteur. Par exemple,
Dans cet exemple, la hauteur de la première ligne est de 100 pixels et les autres de 60 pixels.
J'espère que celui-ci pourra vous aider.
la source
Pour les cellules dynamiques,
rowHeight
la valeur surUITableView
remplace toujours les cellules individuelles 'rowHeight
.Ce comportement est, IMO, un bug. Chaque fois que vous devez gérer votre interface utilisateur à deux endroits, elle est sujette à erreur. Par exemple, si vous modifiez la taille de votre cellule dans le storyboard, vous devez vous rappeler de les modifier
heightForRowAtIndexPath:
également. Jusqu'à ce qu'Apple corrige le bogue, la meilleure solution de contournement actuelle consiste à remplacerheightForRowAtIndexPath:
, mais utilisez les cellules prototypes réelles du storyboard pour déterminer la hauteur plutôt que d'utiliser des nombres magiques . Voici un exemple:Cela garantira que toutes les modifications apportées aux hauteurs de cellule de votre prototype seront automatiquement détectées au moment de l'exécution et vous n'aurez qu'à gérer votre interface utilisateur en un seul endroit: le storyboard.
la source
J'ai construit le code à partir des différentes réponses / commentaires pour que cela fonctionne pour les storyboards qui utilisent des cellules prototypes.
Ce code:
Merci à Answerbot, Brennan et lensovet.
la source
Il y a en fait deux endroits où vous devez modifier la hauteur de la ligne, d'abord la cellule (vous l'avez déjà modifiée), puis sélectionnez la vue Tableau et vérifiez l'inspecteur de taille
la source
Je pense que c'est un bug.
Essayez d'ajuster la hauteur non pas par l'inspecteur de l'utilitaire, mais en faisant glisser la souris directement sur le storyboard.
J'ai résolu ce problème avec cette méthode.
la source
Si vous utilisez swift, utilisez comme ceci. N'utilisez pas le storyboard pour sélectionner la hauteur de ligne. Définissez par programme la hauteur de ligne du tableau comme ceci,
la source
cell.sizeToFit(); self.tableView.rowHeight = cell.frame.height
Vous pouvez obtenir la hauteur de UITableviewCell (dans UITableviewController - cellules statiques) à partir du storyboard à l'aide des lignes suivantes.
la source
Ouvrez le storyboard dans la vue XML et essayez de modifier le
rowHeight
attribut de l'élément souhaité.Cela a fonctionné pour moi lorsque j'ai essayé de définir une hauteur de ligne personnalisée pour ma ligne prototypée. Cela ne fonctionne pas via l'inspecteur, mais via XML cela fonctionne.
la source
Vous pouvez utiliser un prototype
cells
avec une personnalisationheight
, puis invoquercellForRowAtIndexPath:
et renvoyer sonframe.height
.:.la source
Si vous souhaitez définir une hauteur de ligne statique, vous pouvez faire quelque chose comme ceci:
la source
J'ai récemment été aux prises avec cela. Mon problème était les solutions affichées ci-dessus en utilisant le
heightForRowAtIndexPath:
méthode fonctionneraient pour iOS 7.1 dans le simulateur mais auraient ensuite complètement foiré les résultats en passant simplement à iOS 8.1.J'ai commencé à en savoir plus sur les cellules à dimensionnement automatique (introduit dans iOS 8, lire ici ). Il était évident que l'utilisation de
UITableViewAutomaticDimension
aiderait dans iOS 8. J'ai essayé d'utiliser cette technique et j'ai supprimé l'utilisation deheightForRowAtIndexPath:
et le tour est joué, cela fonctionnait parfaitement dans iOS 8 maintenant. Mais alors iOS 7 ne l'était pas. Que devais-je faire? J'avais besoinheightForRowAtIndexPath:
d'iOS 7 et non d'iOS 8.Voici ma solution (raccourcie par souci de concision) qui emprunte à la réponse @JosephH publiée ci-dessus:
SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO (@ "8.0") provient en fait d'un ensemble de définitions de macros que j'utilise et que j'ai trouvées quelque part (très utile). Ils sont définis comme:
la source
Le même problème s'est produit lors du travail sur XCode 9 à l'aide de Swift 4 .
Ajoutez AutoLayout pour les éléments d'interface utilisateur à l'intérieur de la cellule et la hauteur de ligne de cellule personnalisée fonctionnera en conséquence, comme spécifié.
la source
Pour les cellules dynamiques, rowHeight défini sur UITableView remplace toujours rowHeight des cellules individuelles. Il suffit de calculer la hauteur dynamique si le contenu à l'intérieur de la ligne.
la source
La seule vraie solution que j'ai pu trouver est la suivante
Cela fonctionne et permet de ne pas avoir un horrible interrupteur / en cas de duplication de la logique déjà dans le StoryBoard. Je ne suis pas sûr des performances mais je suppose qu'en arrivant
cellForRow:
la cellule, c'est déjà aussi rapide. Bien sûr, il y a probablement des dommages collatéraux ici, mais il semble que cela fonctionne bien pour moi ici.J'ai également posté ceci ici: https://devforums.apple.com/message/772464
EDIT: Ortwin Gentz m'a rappelé que
heightForRowAtIndexPath:
sera appelé pour toutes les cellules de la TableView, pas seulement les cellules visibles. Cela semble logique car iOS doit connaître la hauteur totale pour pouvoir afficher les barres de défilement appropriées. Cela signifie que c'est probablement bien sur de petites tables (comme 20 cellules), mais oubliez-les sur une table de 1000 cellules.En outre, l'astuce précédente avec XML: identique au premier commentaire pour moi. La valeur correcte était déjà là.
la source
Ajouté comme commentaire, mais posté comme réponse pour la visibilité:
Il semble également y avoir un problème si vous configurez initialement une vue de table en tant que «cellules statiques», puis la modifiez en «prototypes dynamiques». J'avais un problème où même la méthode déléguée pour
heightForRowAtIndexPath
était ignorée. Je l'ai d'abord résolu en modifiant directement le XML du story-board, puis j'ai finalement reconstruit la scène du story-board à partir de zéro, en utilisant des prototypes dynamiques dès le départ.la source
Étant donné que je n'ai trouvé aucune solution à ce problème via Interface Builder, j'ai décidé de publier une solution programmatique au problème dans Swift en utilisant deux cellules dynamiques , même si la question initiale demandait une solution via Interface Builder. Quoi qu'il en soit, je pense que cela pourrait être utile pour la communauté Stack Overflow:
la source
Une autre chose que vous pouvez faire est d’accéder à votre plan de document, sélectionnez la vue tabulaire dans laquelle votre cellule prototype est imbriquée. Ensuite, dans l'inspecteur de taille, modifiez la hauteur de ligne de votre vue de tableau à la valeur souhaitée et décochez la case Automatique.
la source