Comment rendre UITableViewCell ajuster la hauteur pour s'adapter à son contenu?

UITableViewCell de faire un UITableViewCell comme ci-dessous, qui ajustera sa taille selon sa vue de contenu. L'image au centre doit être aussi large que le cadre de la cellule, et ajuster sa hauteur proportionnellement.

entrez la description de l'image ici

Comme vous pouvez le voir, l'image dans la cellule ne s'affiche pas comme je le souhaite. J'ai essayé de définir la hauteur de l' UIImageView à 320.0 en override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell , mais n'aide pas du tout.

Question: comment puis-je faire en sorte que la cellule respecte la hauteur de l'image?

FYI:

  1. Je ne surcharge pas func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat
  2. Je ne mets pas de contrainte de hauteur à UIImageView ou quoi que ce soit, j'utilise des paddings uniquement pour organiser les vues.
  3. L'image est affichée en utilisant le mode ajustement d'aspect .

Modifier:

Je me suis déplacé plus loin pour append une contrainte de hauteur à l'image:

 class MyTableViewPostCell: UITableViewCell { @IBOutlet weak var contentLabel: UILabel! @IBOutlet weak var pictureImageView: UIImageView! @IBOutlet weak var pictureImageViewHeightConstraint: NSLayoutConstraint! } class MyTableViewController: UITableViewController { override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return 1 } override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCellWithIdentifier("MyTableViewPostCell") as MyTableViewPostCell cell.contentLabel.text = "This is a very very very very very very very long content." cell.pictureImageViewHeightConstraint.constant = 320 cell.pictureImageView.sd_setImageWithURL(NSURL(ssortingng: "http://somedomain.com/pic")) return cell } } 

Et j'ai une erreur de conflit de contraintes lors de l'exécution. Voir ci-dessous:

 ( "<NSLayoutConstraint:0x7ff7b5026c30 V:[UIImageView:0x7ff7b50289e0(40)]>", "<NSLayoutConstraint:0x7ff7b5029a90 V:[UIImageView:0x7ff7b5029990(320)]>", "<NSLayoutConstraint:0x7ff7b502a630 UIImageView:0x7ff7b50289e0.top == UITableViewCellContentView:0x7ff7b5028910.topMargin + 6>", "<NSLayoutConstraint:0x7ff7b502a770 V:[UIImageView:0x7ff7b50289e0]-(12)-[UILabel:0x7ff7b5029390'This is a very very very ...']>", "<NSLayoutConstraint:0x7ff7b502a950 V:[UILabel:0x7ff7b5029390'This is a very very very ...']-(10)-[UIImageView:0x7ff7b5029990]>", "<NSLayoutConstraint:0x7ff7b502aa40 UITableViewCellContentView:0x7ff7b5028910.bottomMargin == UILabel:0x7ff7b5029c20'Label'.bottom + 10>", "<NSLayoutConstraint:0x7ff7b502aa90 V:[UIImageView:0x7ff7b5029990]-(17)-[UILabel:0x7ff7b5029c20'Label']>", "<NSLayoutConstraint:0x7ff7b2cae430 'UIView-Encapsulated-Layout-Height' V:[UITableViewCellContentView:0x7ff7b5028910(283.5)]>" ) Will attempt to recover by breaking constraint <NSLayoutConstraint:0x7ff7b5029a90 V:[UIImageView:0x7ff7b5029990(320)]> 

Je ne sais pas d'où vient UIView-Encapsulated-Layout-Height , mais il semble que cela provoque le conflit. Aucun moyen de réparer cela? Merci!

Pour iOS 7 et ci-dessous

Utilisez AutoLayout et ajoutez des contraintes correctement, puis utilisez la méthode UITableViewCellHeightForRow pour la hauteur dynamic.

Pour iOS 8 et supérieur

 tableView.estimatedRowHeight = 44.0 tableView.rowHeight = UITableViewAutomaticDimension