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

fen*_*e87 5 uitableview ios swift

我试图在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
    }
}
Run Code Online (Sandbox Code Playgroud)

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

(
    "<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)]>
Run Code Online (Sandbox Code Playgroud)

我不知道从何UIView-Encapsulated-Layout-Height而来,但似乎它正在引发冲突.有任何解决这个问题的方法吗?谢谢!

cor*_*iOS 6

适用于iOS 7及更低版本

使用AutoLayout并正确添加约束,然后将该UITableViewCellHeightForRow方法用于动态高度.

适用于iOS 8及更高版本

tableView.estimatedRowHeight = 44.0
tableView.rowHeight = UITableViewAutomaticDimension
Run Code Online (Sandbox Code Playgroud)