UITableView单元格中的UIStackView在滚动时会导致抖动

问题描述 投票:1回答:1

我有一个UITableView单元格,里面有一个堆栈视图。点击单元格后,数据源会更改并重新加载表格视图。堆栈视图现在内部有更多视图,单元格更大。但是有时当我滚动表格时会出现不稳定的行为。这几乎就像单元格大小计算错误或某些东西(即使它看起来很好)。一旦桌面视图很好并且没有再次执行,直到我点击单元格并且它添加了更多的堆栈视图。

我在桌子视图上使用UITableViewAutomaticDimension。我试过去除细胞,桌子不会晃动。这是导致问题的堆栈视图的挑衅。

我将估计的行高设置为尽可能接近计算的高度tableView.estimatedRowHeight = 270。没有影响。我也试过实现委托,它没有任何区别。我尝试了很多组合或尺寸,结果是一样的。我在这里做错了什么?在单元格中堆叠视图只是吮吸?

ios swift uitableview uistackview
1个回答
1
投票

我认为你正在走上正确的轨道,估计会遇到麻烦。我遇到了这个抽搐问题,几乎每个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)中配置单元格(即向堆栈视图添加新视图),它就应该工作。

这同样适用于节标题。

© www.soinside.com 2019 - 2024. All rights reserved.