自动调整uitableviewcell的大小 - SWIFT

时间:2015-05-05 12:27:04

标签: ios uitableview swift autolayout

我正在尝试根据可以是一行或多行的UILabel的大小来调整tableviewcell的大小。我需要为应用程序的其余部分打开自动布局,所以我不想将其关闭以使其正常工作。目标是iOS 7和iOS 8。

我尝试了几种解决方案,但由于某种原因,我似乎无法获得正确的标签高度来自动调整或调整单元格高度。

此方法出现问题:calculateHeightForConfiguredSizingCell。我已经在Git上放了一个示例项目,所以你可以看到我所看到的。

https://github.com/mdaymond/cellResizer

此示例基于以下文章:http://www.raywenderlich.com/73602/dynamic-table-view-cell-height-auto-layout

更新 我检查了代码的更新。它几乎按照我想要的方式工作并以编程方式计算,但由于某种原因,标签高度的大小不正确 - 它没有达到所需的全高度。原始代码的问题是标签需要明确的宽度。

3 个答案:

答案 0 :(得分:1)

在这里,如果您支持IOS 7,那么您需要在您的班级中实施UITableViewDelegate协议,然后覆盖:

    func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {

}

有关基于标签文本长度的动态自定义UITableViewCell高度的更多信息(请查看此内容),您可以将代码放在heightForRowAtIndexPath函数中: height based on label text length

同样覆盖:

 func tableView(tableView: UITableView, estimatedHeightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
       // example to return the estimated height 
        return 280
    }

注意:通过支持IOS 7,您应该手动处理它。没有像IOS 8那样简单的方法。

但如果您只支持IOS 8及更高版本,那么您可以在以下两行中完成:

self.tableView.estimatedRowHeight = 280
self.tableView.rowHeight = UITableViewAutomaticDimension

答案 1 :(得分:0)

实际上我已下载您的源代码并进行以下更改。并且multiline现在支持heightForRowAtIndexPath

第1步:删除以编程方式计算行高。这意味着您的演示中注释了UILabel

第2步:UITableViewCell的{​​{1}}上设置以下布局限制。

enter image description here

第3步:在xib中将行数设置为 0

输出:

enter image description here

答案 2 :(得分:0)

这是我的代码。

func tableView(tableView: UITableView, estimatedHeightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat
{
     self.scoutPropertyTable.rowHeight = UITableViewAutomaticDimension + 35
    return self.scoutPropertyTable.rowHeight
}