如何使UITableViewCell调整高度以适应其内容?

我试图做一个像下面的UITableViewCell ,它将根据其内容视图调整其高度。 中间的图像应与单元框架一样宽,并按比例调整其高度。

在这里输入图像说明

正如你所看到的,单元格中的图像并不像我想要的那样显示。 我试图设置UIImageView的高度为320.0 override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell ,但根本没有任何帮助。

问:如何让细胞尊重图像的高度?

供参考:

  1. 我不重写func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat
  2. 我不设置UIImageView的高度约束或任何东西,我只使用填充来排列视图。
  3. 图像使用纵横比模式显示。

编辑:

我进一步移动高度约束添加到图片:

 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(string: "http://somedomain.com/pic")) return cell } } 

运行时遇到了约束冲突错误。 见下文:

 ( "<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)]> 

我不知道UIView-Encapsulated-Layout-Height来自哪里,但似乎是导致冲突。 有任何解决这个问题的方法吗? 谢谢!

对于iOS 7及以下版本

使用AutoLayout并正确添加约束,然后使用UITableViewCellHeightForRow方法获取dynamic高度。

对于iOS 8及以上

 tableView.estimatedRowHeight = 44.0 tableView.rowHeight = UITableViewAutomaticDimension