La mise en page automatique est ignorée dans UITableViewCell personnalisé

92

En dépit d'avoir défini des contraintes sur tous les éléments, y compris les contraintes verticales nécessaires à la cellule pour calculer sa hauteur, la disposition automatique semble être ignorée: toutes les cellules sont comprimées.

Voici une capture d'écran du résultat et des contraintes dans le storyboard. entrez la description de l'image ici

entrez la description de l'image ici

Dans le VC qui contient la tableView, voici le code dans viewDidLoad:

tableView.estimatedRowHeight = 120.0
tableView.rowHeight = UITableViewAutomaticDimension

La mise en commentaire de la deuxième ligne donne des cellules d'une hauteur de 120,0 mais la mise en page automatique est également ignorée.

Merci


Mise à jour

Pour simplifier l'interface, j'ai laissé une seule étiquette avec, comme contraintes:

  • Espace de premier plan pour superviser
  • Espace supérieur à superviser
  • Largeur et hauteur fixes (100 & 100)
  • Espace inférieur à la marge du conteneur pour s'assurer que la cellule a toutes les contraintes verticales pour déterminer sa hauteur

Et avec cette interface simplifiée, la mise en page automatique n'est toujours pas prise en compte, ce qui me laisse entendre que le problème ne venait pas de contraintes mal définies.

Dans l'inspecteur de taille, la hauteur de ligne est définie sur 120 et Personnalisé est coché. La cellule a la bonne classe personnalisée, l'identifiant de réutilisation de cellule est correct.


Mise à jour: solution trouvée

C'était une simple erreur, voir ma réponse ci-dessous.

Kqtr
la source
Vérifiez votre terminal de débogage - y a-t-il des journaux NSLayoutConstraint suggérant que quelque chose ne fonctionne pas comme prévu?
Matthew Hallatt
Rien n'apparaît dans le terminal de débogage @MatthewHallatt, merci.
Kqtr
@Kqtr essayez de commenter ces deux lignes, puis exécutez-le normalement une fois pour vérifier s'il y a des changements?
Tushar Sharma
@TusharSharma Commenter les deux lignes a le même effet que commenter la ligne rowHeight uniquement: la cellule a une hauteur de 120,0, mais la mise en page automatique ne fonctionne pas.
Kqtr
1
Le générateur d'interface affiche-t-il des contraintes comme manquantes ou ambiguës? Recherchez le petit point d'exclamation jaune ou rouge.
Matthew Hallatt

Réponses:

249

La mise en page automatique a été ignorée car la cellule prototype ET l'UIView de la cellule avaient reçu la classe de cellule personnalisée dans IB.

La redéfinition de UIView sur la classe UIView a résolu le problème.

juste pour être plus clair

Kqtr
la source
2
J'ai été coincé dans ce problème pendant des heures et cela le résout, merci!
candidev
J'ai perdu presque toute la journée jusqu'à ce que je vienne ici ... Mille mercis à vous.
Renascent le
-3

Je pense que le problème est que vous implémentez:

func tableView(_ tableView: UITableView, heightForRowAt indexPath: 
IndexPath) -> CGFloat {

 return x
}

Vous devez supprimer cette fonction pour que la vue du tableau calcule sa hauteur automatique pour les cellules.

Jaafar Barek
la source
Merci, je ne le remplace malheureusement pas: je n'ai même pas de délégué pour cette tableView, seulement une source de données.
Kqtr
Avez-vous défini les contraintes d'affichage de texte sur tous les bords de la cellule? Et avez-vous désactivé le défilement de textView?
Jaafar Barek
L'étiquette multiligne (0 ligne) a des contraintes pour 1) l'espacement vertical avec le numéro à sa gauche 2) l'espace supérieur pour superview 3) l'espace de fin pour superview et 4) l'espace inférieur avec l'étiquette Asked By.
Kqtr