当前位置: 首页 > 面试题库 >

具有动态单元格高度的UITableView的reloadData()导致跳跃式滚动

东云
2023-03-14
问题内容

我觉得这可能是一个常见的问题,并且想知道是否有任何通用的解决方案。

基本上,我的UITableView具有每个单元格的动态单元格高度。如果我不在UITableView和I的顶部,则tableView.reloadData()向上滚动变得跳动。

我相信这是由于以下事实:当我向上滚动时重新加载数据时,UITableView正在重新计算每个可见的单元格的高度。如何缓解这种情况,或者如何仅将数据从某个IndexPath重新加载到UITableView的末尾?

此外,当我确实设法一直滚动到顶部时,我可以先向下再向上滚动,毫无问题。这很可能是因为已经计算了UITableViewCell的高度。


问题答案:

为防止跳跃,应在加载单元格时保留它们的高度,并在tableView:estimatedHeightForRowAtIndexPath以下位置给出确切值:

迅速:

var cellHeights = [IndexPath: CGFloat]()

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

func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat {
    return cellHeights[indexPath] ?? UITableView.automaticDimension
}

目标C:

// declare cellHeightsDictionary
NSMutableDictionary *cellHeightsDictionary = @{}.mutableCopy;

// declare table dynamic row height and create correct constraints in cells
tableView.rowHeight = UITableViewAutomaticDimension;

// save height
- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {
    [cellHeightsDictionary setObject:@(cell.frame.size.height) forKey:indexPath];
}

// give exact height value
- (CGFloat)tableView:(UITableView *)tableView estimatedHeightForRowAtIndexPath:(NSIndexPath *)indexPath {
    NSNumber *height = [cellHeightsDictionary objectForKey:indexPath];
    if (height) return height.doubleValue;
    return UITableViewAutomaticDimension;
}


 类似资料:
  • 我觉得这可能是一个常见的问题,我想知道是否有任何共同的解决方案。 基本上,我的UITableView拥有每个单元格的动态单元格高度。如果我不在UITableView的顶部,并且我< code > table view . reloaddata(),向上滚动会变得不稳定。 我认为这是因为我在向上滚动时重新加载了数据,UITableView正在重新计算每个可见单元格的高度。如何减轻这种情况,或者如何只

  • 我有一个表格视图,每个单元格都有自己的高度,因此不适合使用。相反,现在我使用和。这意味着它调用单元格上的函数来确定它的高度。这一切都很好。 问题是当你重新加载屏幕上的单元格时。例如,向下滚动以显示单元格10,然后重新加载单元格10,效果很好。但是当您开始向上滚动,经过您已经看到的单元格时,它会恢复到每个单元格的estimatedRowHeight,完全不考虑< code>sizeThatFits,

  • 可变长度的文本数据正在注入到表视图单元格标签中。为了正确调整每个单元格高度的大小,我在中实现了: 这估计高度为88.0像素,如果更大,应该会自动调整高度大小。它非常适用于尚未滚动到的单元格(因为在滚动到单元格时被调用),但不适用于最初在加载数据时在屏幕上呈现的单元格。 我尝试过重新加载数据(正如许多其他资源中建议的那样): 在这两个和,它没有帮助。我迷路了…有人知道如何渲染最初在屏幕上加载的单元格

  • 我有用自定义单元格(继承自)填充的用户界面视图,每个单元格都包含一个,该视图根据其内容自动调整大小。事情是这样的,如何根据内容(可变视图)更改 单元格的高度。 该解决方案必须是动态的,因为用于填充< code>UIWebViews的HTML是从不断变化的提要中解析的。 我觉得我需要使用委托方法 中更改单元格的高度吗? 任何帮助都是伟大的。谢谢 两年多前我问过这个问题。通过介绍自动布局,可以找到iO

  • 我是swift新手,正在从事Swift 3.0中的一个项目,其中我有一个包含三个自定义单元格的UITableView。在第一个中,我只有一个图像、按钮和标签。在第二个,我有一个图像加上标签以及可扩展和可折叠的标题。因此,第二个单元格有三个不同的部分。最后,第三个也只包含一个标签。在第一个单元格中,UILabel被设置在包含一个人的描述的图像下面(已经设置了约束)。我的要求是只对第一个单元格根据描述

  • 对于我的表视图单元格的动态高度,我从此链接中引用。在 UITableView 中使用自动布局进行动态单元格布局 这是我的表视图数据源和委托方法的代码 我有 2 个问题: > 我的问题是我在线路附近收到错误 在和。 为什么我必须在单元格中同时写入标签文本“和? 另外,我是否缺少实现单元动态高度所需的任何内容?