【问题标题】:UITableView/UICollectionView scrolling looks choppy after Xcode 9.0 and iOS 11在 Xcode 9.0 和 iOS 11 之后,UITableView/UICollectionView 滚动看起来不连贯
【发布时间】:2017-10-30 07:07:09
【问题描述】:

我在 iPhone 应用程序中有四个页面。所有 4 个页面都是 UIViewController 的子类。两个页面都有 UITableView 来显示项目列表。两个页面都有 UICollectionView 来显示数据。在 AFNetworking 的帮助下从 Web 服务获取的所有数据。它来得很好,没有任何问题。我使用所有必需和推荐的方法显示来自情节提要的 tableView 和 collectionView 的自定义单元格。

在我将 Xcode 8.3 更新到 Xcode 9.0 和 iOS 11 之前,它曾经在模拟器和设备中显示平滑滚动。我尝试了 this 的解决方案以及 SO 的其他可能解决方案,但没有解决我的问题。最令人困惑的部分是我没有更改 tableView 或 collectionView 的单行代码,它开始显示断断续续的效果。

看起来它每秒都在等待一些东西,并且滚动时有明显的停顿——尽管在显示数据时我没有任何复杂的逻辑。我只是在 Web 服务响应中显示数据。我也有旧分支,它曾经在 Xcode 8.3 上显示平滑滚动,但是当我在 Xcode 9.0 上运行相同的代码时,它显示不连贯的滚动。

我使用 macOS 10.12.6、Xcode 9、Swift 4 以及带有 iOS 11 和 iOS 10.3 的模拟器。

【问题讨论】:

  • 你能告诉我你重新加载表的响应区域吗?
  • 所有数据都是预取的,还是在细胞被回收时下载?您是否尝试使用静态数据填充 UITableView,并检查您是否仍然观察到相同的延迟?
  • 谢谢大家的回复。我正在使用一个第三方视频录制工具,这给每个可滚动视图都带来了断断续续的效果。该工具不适用于 iOS 11,因此一旦我删除该工具,所有可滚动视图都像以前一样流畅。

标签: ios11 swift4 xcode9 ios10.3


【解决方案1】:

我们找到了解决此问题的方法!如果你只是实现

-[UITableView tableView:estimatedHeightForRowAtIndexPath:]

并返回您的

-[UITableView tableView:heightForRowAtIndexPath:]

一切都会好起来的。

更新: 事实证明,问题的核心是,当您使用 Xcode 8 分配新的 UITableView 时,UITableView.estimatedRowHeight 的默认值为 0,而当您使用 Xcode 9 时,默认值为 -1,即 UITableViewAutomaticDimension。将其设置回 0 即可解决此问题。

【讨论】:

    【解决方案2】:

    将集合视图的 isPrefetchingEnabled 设置为 false,或者(更好地解决您的问题)使用 UICollectionViewDataSourcePrefetching/UITableViewDataSourcePrefetching 中的预取方法来获得更流畅和更有效的滚动。在那里进行任何网络加载,以便在需要创建单元格时准备好数据

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-06-18
      • 2013-08-29
      • 2013-10-17
      • 2020-02-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多