-1

Il y a eu tellement de réponses à cette question sur le débordement de pile, sachez que j'ai regardé mais toutes les solutions ne fonctionnent pas pour moi. J'ai deux UILabels dans la cellule, on a une largeur et une hauteur définies, l'autre qui sera dynamique, je mets la largeur environ < = 250 et la hauteur> = 50. Je l'ai également mis les quatre marges à la vue du contenu, puis j'ai essayé ces deux méthodes ci-dessous pour obtenir la hauteur de la chaîne:COMMENT augmenter CORRECTEMENT UITableViewCell en utilisant la hauteur UILabel

var context: NSStringDrawingContext = NSStringDrawingContext() 
     context.minimumScaleFactor = 0.8 
     cell?.body.text = msg.body 
     var width: CGFloat = (cell?.body.frame.size.width)! 
     width = ((UIScreen.main.bounds.width)/320)*width 
     let size: CGSize = (cell?.body.text!.boundingRect(with: CGSize(width: width, height: 2000), options:NSStringDrawingOptions.usesLineFragmentOrigin, attributes: [NSFontAttributeName: cell?.body.font], context: context).size)! 
     print("size.height is \(size.height)") 
     return size.height 

et cette méthode:

var optimalHeight : CGFloat 
{ 
    get 
    { 
     let label = UILabel(frame: CGRect(x: 0, y: 0, width: self.frame.width, height: CGFloat.greatestFiniteMagnitude)) 
     //let label = UILabel(frame: CGRectMake(0, 0, self.frame.width, CGFloat.greatestFiniteMagnitude)) 
     label.numberOfLines = 0 
     label.lineBreakMode = self.lineBreakMode 
     label.font = self.font 
     label.text = self.text 

     label.sizeToFit() 

     return label.frame.height 
    } 
} 

et pour ces deux, l'image ci-jointe est ce que montre le UILabel, qui, comme on peut le voir, est loin. J'ai également essayé d'implémenter UITableViewAutomaticDimension dans les méthodes estimatedHeightForRowAt et heightForRowAt, mais cela ne fonctionnait pas, après deux lignes, il ne s'étendrait pas plus loin. Je essayé d'appeler estimatedRowHeight et rowHeight dans la méthode viewDidLoad() comme ceci:

tableView.rowHeight = UITableViewAutomaticDimension 
tableView.estimatedRowHeight = 300 //even went as far as using 800 

même chose, cessé de croître au bout de 2 lignes. J'ai aussi vu quelque chose sur l'application de ces méthodes:

tableView.setNeedsLayout() 
tableView.layoutIfNeeded() 

et pourtant rien! J'ai regardé le tutoriel de Raywenderlich et beaucoup plus. Je n'ai aucune idée de ce que je fais de mal. Cela pourrait être une question en double mais je vous assure que j'ai essayé toutes les solutions et rien ne fonctionne pour moi. S'il vous plaît quelqu'un pourrait jeter un coup d'oeil à cela et voir ce que je fais mal?

ce sont les captures d'écran des contraintes pour les étiquettes enter image description hereenter image description here

+2

Pourquoi n'utilisez-vous pas autolayout? C'est la partie "correcte" que vous omettez, juste là. Cette fonctionnalité (la cellule se dimensionne automatiquement à son contenu) est _all about autolayout_. – matt

+0

@matt comment voulez-vous dire? J'ai récemment commencé à apprendre à propos de swift alors s'il vous plaît pourriez-vous expliquer plus loin? Ce [article] (https://www.appcoda.com/auto-layout-guide/) explique juste la disposition automatique comme ayant des contraintes, que j'ai déjà en place? Ou y a-t-il plus? – Aria

+0

Pour que la hauteur de ligne automatique fonctionne, il doit y avoir un chemin du haut de la cellule vers le bas via des vues et des contraintes. Est-ce que l'étiquette est la seule chose dans la cellule? Est-ce qu'il est limité à la fois en haut et en bas? – Connor

Répondre

0

Je passai mes dequeuing dans cellForRowAt sur un fil de fond et ce qui a empêché mes cellules d'être dynamique. Après avoir sorti cette déclaration, ça a fonctionné parfaitement! Un tel gâchis de temps de code fixer quelque chose qui n'a jamais été rompu