使用 UIImageView 调整单元格高度

Posted

技术标签:

【中文标题】使用 UIImageView 调整单元格高度【英文标题】:Adjust cell height with UIImageView on it 【发布时间】:2015-10-30 14:59:40 【问题描述】:

我在UITableViewCell 上有一个 imageView,我想将单元格/imageView 的高度设置为不同的值,比较我在原型单元格中设置的值。我不想实现heightForRowAtIndexPath 方法,因为我不想预先计算内容的高度。如果设置了 UITableViewAutomaticDimension 并且至少在 ios 8 上heightForRowAtIndexPath 不需要实现。

override func viewDidLoad() 
    super.viewDidLoad()

    tableView.estimatedRowHeight = 44.0
    tableView.rowHeight = UITableViewAutomaticDimension


override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int 
    // #warning Incomplete implementation, return the number of rows
    return 3


override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell 

    let cell = tableView.dequeueReusableCellWithIdentifier("cell")!
    let iv = cell.viewWithTag(1) as! UIImageView
    iv.image = UIImage(named: "img1")
    let cs = iv.constraints.first! as NSLayoutConstraint
    cs.constant = 100
    cell.layoutIfNeeded()
    cell.setNeedsUpdateConstraints()

    return cell

原型的结构:

虽然原型中单元格的高度设置为 44.0 px,但在cellForRowAtIndexPath 方法中我想用 100.0 px 覆盖这个值。

【问题讨论】:

只是为了检查 - 您希望您的表格视图单元格在运行时根据 UIImageView 的大小使用自动布局自动调整自己的大小? 我忘记添加图像的底部约束,导致问题,并且不需要任何更新方法:cell.layoutIfNeeded() cell.setNeedsUpdateConstraints() 【参考方案1】:

它不会像你那样工作。

你应该实现 UITableViewDelegate 的委托方法

func tableView(tableView: UITableView!, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat 
    // calculate size of image and return its height here

【讨论】:

以上是关于使用 UIImageView 调整单元格高度的主要内容,如果未能解决你的问题,请参考以下文章

使用 UITableViewAutomaticDimension 时 UIImageView 拉伸不正确

如何调整自定义tableview单元格下的UIImageview

根据单元格高度在 UITableViewCell 内动态设置 UIImageView 高度

让自定义 TableViewCell 的 UIimageView 宽度为单元格宽度的 1/3,单元格高度 = 图像纵横比

自动调整 TableViewCell 的高度以适应 iOS 6 中的 UIImageVIew

设置 UIImageView 的高度时 AutoLayout 失败