Ios Swift-尝试动态更改UITableView行高度,但从未调用heightForRowAtIndexPath

Ios Swift-尝试动态更改UITableView行高度,但从未调用heightForRowAtIndexPath,ios,uitableview,swift,Ios,Uitableview,Swift,我已经尝试了一天多的时间,根据单元格中包含的标签中的文本量动态更改UITableView单元格的行高。我尝试了许多来自网站和视频的建议,但都没有效果。由于某种原因,函数heightforrowatinexpath从未被调用,即使CellForrowatinexpath每次都被调用 下面是我刚刚使用的一些代码,看看是否可以在运行时更改结果。您看到的值仅用于测试。我在这一部分面临的主要问题是,即使UITableViewDelegate设置正确,也不会调用整个函数 func tableView(tab

我已经尝试了一天多的时间,根据单元格中包含的标签中的文本量动态更改UITableView单元格的行高。我尝试了许多来自网站和视频的建议,但都没有效果。由于某种原因,函数heightforrowatinexpath从未被调用,即使CellForrowatinexpath每次都被调用

下面是我刚刚使用的一些代码,看看是否可以在运行时更改结果。您看到的值仅用于测试。我在这一部分面临的主要问题是,即使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中包含的所有用户界面组件根据单元格中标签包含的文本量正确移动,但是单元格本身每次都保持相同的大小,这会导致用户界面组件有时超出单元格的边界,并被放置在它下面的下一个单元格中


关于我可以尝试什么有什么建议吗?

假设您在tableviewcell中有一个UILable,那么只需删除所有自动布局约束,然后计算在UILable的边框中设置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.
}
希望这对你有帮助


呵呵,编码快乐

你能删除代码返回500,并把返回的大小。Heighth我也试过了,但没有成功,因为这个函数从来没有被调用过。我将返回值改为常数500,只是想看看这是否有用。但是,当我在函数开头放置断点时,它表明代码从未在运行时执行。您是否尝试过通过动态High计算来执行它,和删除自动布局约束?我没有尝试过删除自动布局约束的任何操作,因为我的理解是,为了计算单元格的动态大小,需要自动布局约束。你能进一步解释吗?我可以试试。但是仍然存在的主要问题是heightforrowatinexpath函数从未被调用。我已经验证了tableView委托是在代码和IB中设置的。由于某种原因,在函数开头放置断点进行验证时,代码永远不会执行。我不明白为什么它不会执行。我觉得这很傻,但它可能是prblm,您是否将类设置为视图控制器?是的,它设置为正确的视图控制器,代码正确地调用cellForIndexPath,但它根本不调用heightForRowAtIndexPath。我已经为tableView设置了委托和数据源。据我所知,CellForRowatineXpath是一个数据源方法,而HeightForRowatineXpath是一个委托方法。这可能意味着委托的设置可能有问题,但我不确定这是怎么回事,因为tableView委托是在代码和IB中都设置的。