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.
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:
func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat
UIImageView
ou quoi que ce soit, j'utilise des paddings uniquement pour organiser les vues. 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