我的 iPhone 应用程序中有四个页面。所有 4 个页面都是 UIViewController 的子类。两个页面都有 UITableView 来显示项目列表。两个页面都有 UICollectionView 来显示数据。所有数据均在 AFNetworking 的帮助下从网络服务获取。它进展顺利,没有任何问题。我使用所有必需和推荐的方法显示了 tableView 和 collectionView Storyboard中的自定义单元格。
在我将 Xcode 8.3 更新到 Xcode 9.0 和 iOS 11 之前,它曾经在模拟器和设备中显示平滑滚动。我尝试使用 this 中的解决方案。还有其他可能的解决方案,但不能解决我的问题。最令人困惑的部分是,我没有更改 tableView 或 collectionView 的一行代码,它开始显示出不稳定的效果。
看起来它每秒都在等待一些东西,并且滚动时有明显的暂停,尽管我在显示数据时没有任何复杂的逻辑。我只是显示网络服务响应中的数据。我也有旧分支,它曾经在 Xcode 8.3 中显示平滑滚动,但当我在 Xcode 9.0 运行相同的代码时,它显示不稳定的滚动。
我使用 macOS 10.12.6、Xcode 9、Swift 4 以及 iOS 11 和 iOS 10.3 模拟器。
最佳答案
我们找到了解决此问题的方法!如果你只是实现
-[UITableView tableView:estimatedHeightForRowAtIndexPath:]
并返回您的
-[UITableView tableView:heightForRowAtIndexPath:]
一切都会顺利。
更新: 事实证明,问题的核心在于,当您使用 Xcode 8 分配新的 UITableView 时,UITableView.estimatedRowHeight 的默认值为 0,而当您使用 Xcode 9 分配新的 UITableView 时,默认值为 -1,即 UITableViewAutomaticDimension。将其设置回 0 可解决该问题。
关于ios11 - Xcode 9.0 和 iOS 11 后 UITableView/UICollectionView 滚动看起来不稳定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47009700/