UITableView modification de comportement de disposition étrange sur le parpath

J'ai un UITableView avec UITableView personnalisé conçu pour avoir la hauteur automatique.

Le comportement est que dans le premier chargement de mon UIViewController avec UITableView affiche mes labels avec des texts partiels. Ensuite, lorsque je fais défiler vers le bas, faites défiler vers le haut, j'obtiens le look désiré pour la hauteur et pour les texts.

Voici les captures d'écran:

Look initial pour le controller de vue:

entrez la description de l'image ici

Voici le look après défilement en bas puis en haut (Ceci est le look correct pour ma mise en œuvre du text Lorem est enlevé par moi):

entrez la description de l'image ici

Modifier 1:

Code:

 tableView.rowHeight = UITableViewAutomaticDimension tableView.estimatedRowHeight = 101 // much heigher than most cells. But no use. 

Dans UI Builder, la hauteur de ligne de UITableViewCell est définie sur "Default" (Personnalisé non coché)

Dans le constructor de l'interface user, la hauteur de ligne de UITableView est définie sur "101" (également essayé de la définir sur "0" mais le même résultat.)

Pour que la layout automatique fonctionne sur UITableViewCell, assurez-vous que vous avez des contraintes pour épingler chaque sous-vue de tous les côtés, c'est-à-dire que chaque sous-vue doit avoir des contraintes de début, de fin et de bas.

De plus, vous avez besoin d'une ligne claire de contraintes allant du haut vers le bas de contentView. Cela garantit que la mise en forme automatique détermine correctement la hauteur du contenu en fonction de ses sous-vues.

La partie la plus délicate est qu'Interface Builder ne vous avertira pas souvent si certaines de ces contraintes vous manquent; La layout automatique ne renvoie tout simplement pas les hauteurs correctes lorsque vous exécutez le projet. Par exemple, il peut returnner 0 pour la hauteur de la cellule, ce qui est un indice que vos contraintes ont besoin de plus de travail.

Si vous rencontrez des problèmes lorsque vous travaillez avec vos propres projets, essayez d'ajuster vos contraintes jusqu'à ce que les critères ci-dessus soient remplis.

consultez le lien pour plus de détails: http://www.raywenderlich.com/87975/dynamic-table-view-cell-height-ios-8-swift

Je pense que vous pouvez utiliser la méthode heightForRowAtIndexPath

  override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat { var heightToReturn : CGFloat = 0 heightToReturn = SsortingngUtil.findHeightForText("your text", havingWidth: "your label width" , andFont: UIFont.systemFontOfSize("font size")) + // add some buffer for padding if heightToReturn < 101 { heightToReturn = 101 } return heightToReturn } } 

et utilisez cette méthode pour calculer la hauteur du text

 + (CGFloat)findHeightForText:(NSSsortingng *)text havingWidth:(CGFloat)widthValue andFont:(UIFont *)font { CGFloat result = font.pointSize+4; if (text) { CGSize size; CGRect frame = [text boundingRectWithSize:CGSizeMake(widthValue, CGFLOAT_MAX) options:NSSsortingngDrawingUsesLineFragmentOrigin atsortingbutes:@{NSFontAtsortingbuteName:font} context:nil]; size = CGSizeMake(frame.size.width, frame.size.height+1); result = MAX(size.height, result); //At least one row } return result; 

}