TableView : adaptater une cellule au contenu (custom class)
class customCell : UITableViewCell {
let imgProd = ImageView()
let labelDesc = UILabel()
...
init() {
labelDesc.frame = CGRect(...,...,width:...,height:20)
...
contentView.addSubView(labelDesc)
}
}
Bonjour à tous,
J'ai actuellement un souci, pour une TableViewController, j'ai créé une classe personnalisée pour les cellules, cellules dans laquelle je veux afficher
cellule 1 : une image
cellule 2 : la description du produit
cellule 3 : d'autres infos
le souci est que je n'arrive pas à adapter la hauteur de la cellule 2 à la description du produit, parfois elle fait 5 lignes, parfois 10 lignes etc. Cela provient du fait que j'ai dans la classe qui créé la custom cell l'initialisation de la hauteur à 20 mais comment initialiser labelDesc.frame pour que la cellule qui contient labelDesc s'adapte à la longueur du texte ?
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Bonjour Helio !
Dans la class de la TableView, tu peux changer la taille de chacune de tes rows.
Tu peux récupérer la hauteur de la description du produit et la retourner.
J'espère que ça t'aide.
Salut,
alors avec des cellules basiques, j'ai utilisé UITableViewAutomaticDimension dans heightForRowAt et cela fonctionne bien.
En revanche quand je passe à une cellule custom, et que je passe par une custom class, cela ne fonctionne plus (logique car j'initialise la hauteur du label à 20, donc il reste à 20) mais comment faire dans l'initialisation du labelDesc pour utiliser UITableViewAutomaticDimension ?
Si tu utilises Storyboard, tu peux définir ta custom cell directement dans le storyboard. Je te conseille de faire comme ça car ça te permet d'utiliser autolayout et donc de ne pas t'en faire pour ce type de problématique.
Si tu persistes à le faire par code, peut être qu'un label.sizeToFit pourrait aider mais pas gagné...
Le sizeToFit est déjà présent dans cellForRowAt (cell.sizeToFit), mais effectivement pas pensé à le faire sur le label ! je teste ce soir.
Merci.
La réponse est dans la question. La hauteur de la cellule devant être déterminée automatiquement, il faut bien renvoyer UITableViewAutomaticDimension dans heightForRow().
Ce sont ensuite les contraintes autolayout qui agrandiront ta cellule en hauteur.
De nombreux composant de UIKit ont une taille "intrinsèque" (sic) et il ne faut en général pas mettre de contraintes sur la hauteur et la largeur d'un label, puisque la taille intrinsèque dépend du contenu.
(ceci dit, j'ai du mal à faire fonctionner la taille automatique des cellules sous iOS 10).