Swift - 尝试动态更改UITableView行高,但不会调用heightForRowAtIndexPath

时间:2015-04-16 17:06:29

标签: ios uitableview swift

我已经尝试了一天以上,根据单元格中包含的标签中的文本数量,动态更改UITableView单元格的行高。我尝试过网站和视频的大量建议都无济于事。由于某些原因,函数heightForRowAtIndexPath永远不会被调用,即使每次都调用了cellForRowAtIndexPath。

以下是我刚刚使用的一些代码,用于查看是否可以在运行时更改结果。您看到的值仅用于测试。我正面临的主要问题是即使UITableViewDelegate设置正确,整个函数也不会被调用。

func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
    let cell: VCNewsFeedCell = tvPosts.dequeueReusableCellWithIdentifier("NewsFeedCell", forIndexPath: indexPath) as VCNewsFeedCell

    cell.lblDescription.setNeedsLayout()
    cell.lblDescription.layoutIfNeeded()

    var size: CGSize = cell.systemLayoutSizeFittingSize(UILayoutFittingCompressedSize)

    return 500
}

我也尝试过新的方法来动态增加iOS8的行高,但这也没有用。我为此尝试的方法包括放在viewDidLoad函数中的以下代码行:

    self.tvPosts.rowHeight = UITableViewAutomaticDimension
    self.tvPosts.estimatedRowHeight = 350

上述两种方法都没有做任何改变行高的事情。

作为旁注,我已经成功地对表视图单元格中包含的所有用户界面项设置了约束,因此,所有用户界面项都在运行时显示在正确的位置,并且它们可以根据需要正确移动标签中包含在表格单元格中的文本数量。

总之,我能够让自定义UITableViewCell中包含的所有用户界面组件根据单元格中标签所包含的文本数量正确移动,但每次单元格本身保持相同的大小这会导致用户界面组件有时会超出单元格的边界并被放置在它下面的下一个单元格中。

有关我可以尝试的任何建议吗?

1 个答案:

答案 0 :(得分:0)

假设你在tableviewcell中有一个UILable,所以只需删除所有自动布局约束,并计算在uitableviewcell边界设置uilalbe所需的高度,

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    CGSize expectedLabelSize = [yourString sizeWithFont:yourLabel.font 
                    constrainedToSize: CGRectMake(UILable.frame.size.width, CGFLOAT_MAX) 
                    lineBreakMode:yourLabel.lineBreakMode];

    return  expectedLabelSize.height; //You can add padding size like in top and bottom.
}

希望这会对你有所帮助,

HTH,Happy Coding !!