重新加载单元格后向上滚动时具有动态单元格高度跳跃的 UITableView

2023-12-30

我有一个表格视图,每个单元格都有可能有自己的高度,因此不适合使用rowHeight。相反,现在我正在使用let indexSet = NSIndexSet(index: 10), and self.tableView.estimatedRowHeight = 75。这意味着它调用sizeThatFits对单元格起作用,以确定其高度。这一切都运作良好。

问题是当您重新加载屏幕上的单元格时。例如,向下滚动以显示单元格 10,然后重新加载单元格 10,效果很好。但是,当您开始向后滚动,经过您已经看到的单元格时,它会恢复为每个单元格的估计行高度,完全忽略sizeThatFits,因此当您滚动时会跳跃。我不可能给出一个准确的或“足够好”的估计行高度,这样这种跳跃就不会被注意到,因为我的单元格将能够显示一行文本或完整图像 - 这是一个巨大的差异尺寸。

我在这里展示了这个效果:

https://vid.me/edgW https://vid.me/edgW

我对此进行了许多不同的尝试,混合使用 heightForRowAtIndexPath、estimatedHeightForRowAtIndexPath.. 等。我在 StackOverflow 上尝试了各种建议。似乎没什么作用。

我附上了一个非常简单的示例项目,您可以自己尝试一下:

https://www.dropbox.com/s/8f1rvkx9k23q6c1/tableviewtest.zip?dl=0 https://www.dropbox.com/s/8f1rvkx9k23q6c1/tableviewtest.zip?dl=0

  1. 运行项目。
  2. 滚动直到看到单元格 10。
  3. 等待最多 5 秒,让单元格重新加载(它变成紫色)。
  4. 向上滑动。

值得注意的是——这确实not如果重新加载时单元格不在视图中,则会发生这种情况。如果是以上任一情况or在当前滚动点以下,一切都按预期进行。


如果没有其他原因,这种行为似乎是一个错误,只是它在 iOS 9 上不再重现。我确信这并不能带来太多安慰。

正如 @NickCatib 所说,这个问题主要源于不准确的估计。在 iOS 8 上你能做的最好的事情就是改进估计。许多人推荐的一种技术是将高度缓存在willDisplayCell并在后续调用中使用它们estimatedRowHeightAtIndexPath.

您也许可以通过不做任何事情来减轻这种行为UITableView丢弃其缓存,例如直接使用修改单元格中的内容cellForRowAtIndexPath而不是在屏幕上使用重新加载。但是,如果您确实需要更改单元格的高度,这将无济于事。

恐怕不能在表视图中轻松修复该错误,因为您无法控制布局。在子类中可以更轻松地解决该错误UICollectionViewFlowLayout通过改变contentOffsetAdjustment在无效期间,尽管这可能不是很容易。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

重新加载单元格后向上滚动时具有动态单元格高度跳跃的 UITableView 的相关文章

  • 新的 FUITableViewDataSource - 如何使用?雨燕3

    刚刚更新到较新的 FirebaseUI Pod 有些事情发生了变化 但其中最大的变化之一是 FUI 表视图的工作方式 我让它在旧版本上运行良好 但在下面遇到了困难 并且缺乏文档 示例 self dataSource FUITableView
  • iOS App布局错误,调用状态栏

    在主动通话和应用程序布局期间面临状态栏问题 我正在使用自动布局 当我运行应用程序 然后开始通话时 一切正常 UI 会随着状态栏的更改而正确缩放 但是 如果我首先开始通话 然后运行应用程序 应用程序屏幕会移动到底部 20pt 就像它们对新状态
  • 使用 UIImagePickerController 的应用程序在拍照后选择“使用照片”时冻结

    我现在正在开发一个简单的照片和视频捕获应用程序 该应用程序成功地允许用户按下按钮即可拍摄照片或视频 但是 一旦您完成拍摄照片或视频 它就会提供 2 个选项 重新拍摄 和 使用照片 或 使用视频 具体取决于您使用的选项 如果用户点击 重新拍摄
  • 使用隐藏的 SFSafariViewController 获取 Safari cookie

    我正在阅读以下关于从移动网页到本机 iOS 9 应用程序对用户进行身份验证的文章 并且想知道如何最好地实现类似于下面讨论的隐藏控制器的隐藏 safari 视图控制器 https library launchkit io how ios 9
  • 尝试从独立的 Apple Watch 应用发出网络请求

    当应用程序是独立应用程序时 Apple Watch 是否无法进行网络通话 即使手表已连接到 iPhone 我正在使用新的独立应用程序目标 它没有附带可以发出 WatchConnectivity 请求的配对 iOS 应用程序 我十有八九收到
  • iOS 外部附件框架:如何获取特定 MFI 设备的协议字符串

    我正在编写一个 iOS 应用程序 用于与 mini mPlay Drumi MP18B 小型蓝牙扬声器 进行通信 据我所知 showBluetoothAccessoryPickerWithNameFilter仅显示协议字符串添加到 Info
  • 自动布局和ios5

    我正在使用故事板 我已经使用了自动布局 但它不适用于 ios5 并且会崩溃 所以我想删除它 但是 如何取消选中自动布局 但如果我取消选中自动布局 我如何为 iPhone 4 和 5 设置屏幕 Regards 您可以在 IB 中禁用自动布局
  • Swift:从自定义 UITableViewCell 中的 UITextField 检索文本并将其放入数组中

    我正在制作一个非常简单的应用程序 用户在第一个屏幕中输入人数 在第二个屏幕中 它会生成一些UITableViewCell基于用户在第一个屏幕中输入的数字 这UITableViewCell have a UITextField在其中 一旦用户
  • UIBezierPath 的起始和结束角度?

    我在 iOS 中使用如下代码编写了半圆UI贝塞尔路径 and CAShape层 clockWiseLayer CAShapeLayer alloc init CGFloat startAngle M PI 2 CGFloat endAngl
  • iOS 内存警告

    我正在尝试使用从 Parse 数据库下载的图像填充集合视图 但我收到内存警告 然后偶尔崩溃 有谁知道其他应用程序如何设法呈现这么多图像而不崩溃 有人可以告诉我如何优化我已有的东西吗 这是所有相关代码 https gist github co
  • Swift -boundingBox 导致 EXC_BAD_ACCESS (代码 = 1)

    我正在使用 SceneKit 来显示文本节点 这是我的代码 foo swift extension SCNNode func getNodeSize gt width Float height Float let min max bound
  • 切换到工作区并在 Xcode 中添加 CocoaPods 后提交 git 吗?

    我刚刚在 Xcode 5 中将 CocoaPods 添加到我当前的项目中 当然 CocoaPods 创建了一个工作区 并且我已在 Xcode 中启动了该工作区 我在工作区中看到了我的项目和 Pods 项目 我的项目从第一天起就处于源代码控制
  • iOS 中的等宽字体是什么?

    我想要在我的 iOS 应用程序中为 UILabel 使用等宽字体 不幸的是 我找不到一个 甚至 美国打字机 实际上也不是等宽的 XCode 中可用的等宽字体是什么 iOS 等宽字体 Courier Courier Bold Courier
  • 使用反射的属性类型或类

    我想知道是否可以确定对象属性的类或原始类型 获取所有属性名称和值非常容易 所以答案 https stackoverflow com questions 2299841 objective c introspection reflection
  • 更改 UITextField 辅助功能描述

    有没有办法将 UITextField 的辅助功能标签设置为 文本字段 之外的其他内容 因此 我不想将其称为 文本字段 而是将其命名为 代码验证字段 我的建议是不要试图在内置语音输出上智取系统 对于盲人用户来说 文本字段正在编辑 相当于 该项
  • 打印附加结构(swift 4)

    我有三个 textifled 用于将数据附加到结构中 如何打印我附加的内容 现在我收到一条错误消息 import UIKit class ViewController UIViewController IBOutlet var c UITe
  • 在 iOS 10 上将 UISearchController 与 UITableViewController 结合使用时,UITableView 标头出现奇怪的空白

    空白仅出现在 iOS 10 上 我也遇到了这个问题 如果启用了垂直滚动指示器 您应该能够看到它是一个UIScrollView的插入问题 似乎只有当你使用UITableViewcontroller as the searchResultsCo
  • 如何在 EKRecurrenceRule 中设置一周中某一天的数组?

    我想在用户选择的特定日期每周添加事件 可以是一个或多个 也可以是一整天 我将用户选择的日期值存储在模型类变量中 但是 当我添加事件并选择日期时 假设今天是星期一 我选择星期二和星期三并保存 然后我查看周一和周三添加的 iPhone 日历 我
  • 为什么 GDB 调试器不断冻结 Xcode 4?

    这真是一个奇怪的错误 我正在开发一个使用相机源的 iPhone 项目 并通过 OpenGL 着色器运行它以对其应用效果 然而 每次我在代码中简单地创建一个新的 GLfloat 时 调试器都会在启动时冻结 我无法复制和粘贴文本 因为整个 XC
  • 如何自动为 Swift 类创建初始化程序?

    UPDATE 使用结构而不是类 struct 在很多方面都更好 它有自己的初始化器 这是我的模型课 是否有可能创建init自动方法 每次我都必须将所有变量一一初始化 这会花费很多时间 class Profile var id String

随机推荐