滚动时,UITableView单元格中的UIStackView导致跳动

时间:2018-09-13 11:28:45

标签: ios swift uitableview uistackview

我有一个带有堆叠视图的UITableView单元格。轻触单元格后,数据源将更改,并且表视图将重新加载。现在,堆栈视图将在内部具有更多视图,并且单元格更大。但是有时候,当我滚动表格时会有不平稳的行为。这几乎像是像元大小计算错误一样(即使看起来不错)。一旦tableview抽动一下就很好了,直到我点击单元格并且它添加了更多的堆栈视图之后,它才再次执行。

我在表格视图上使用UITableViewAutomaticDimension。我试过删除单元格,但该表不混蛋。绝对是导致问题的堆栈视图。

我将估计的行高设置为尽可能接近计算的高度tableView.estimatedRowHeight = 270。没关系我也尝试过实现委托,这没有什么区别。我尝试了许多组合或大小,结果是相同的。对我在这里做错的任何想法吗?单元格中的堆栈视图是否很烂?

1 个答案:

答案 0 :(得分:1)

我认为您在关于估计的RowHeight引起麻烦的正确道路上。我遇到了这个问题,几乎在每个tableView中都有不同的元素大小。通常的工作是“缓存”单元格高度并以委托形式返回它们,例如:

class MyViewController: UIViewController {

    fileprivate var cachedCellHeights = [IndexPath: CGFloat]()

    //your code here

}

extension MyViewController: UITableViewDelegate {

    public func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
        cachedCellHeights[indexPath] = cell.frame.height
    }

    public func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat {
        if let height = cachedCellHeights[indexPath] {
            return height
        }
        return 270
    }

}

只要您在tableView(_ tableView:UITableView,cellForRowAt indexPath:IndexPath)中配置单元格(即向堆栈视图添加新视图),它就应该起作用。

节头同样如此。