【发布时间】:2016-12-08 01:32:37
【问题描述】:
我认为根本原因是estimatedRowHeight 被用来对底层UIScrollView.contentOffset 做出假设,但这在定义上总是错误的,因为它是一个估计值。实际行高完全不同,具体取决于单元格内容和设备方向。
即使我实施estimatedHeightForRowAtIndexPath 以提供更精确的估计,故障仍然存在。
因此,当您从顶部开始并向下滚动时,一切都很好,因为 TableView 在保持 contentOffset 与单元格位置同步时会学习实际的单元格高度。但是,一旦您旋转所有真实的单元格高度,UITableView 现在就会不同步,它不知道滚动到哪里。
但也有更奇怪的事情发生,有时UITextField 单元格最终会位于另一个单元格的顶部,并一直卡在那里......
不管怎样,我已经把它归结为一个简单的例子。
https://github.com/trapper-/autolayout-glitch
- 使用 iPhone 进行测试,如果使用模拟器,则启用软件键盘。
- 您会在滚动、选择字段和旋转时看到许多视觉故障。
- 举一个简单的可重复示例。
- 向下滚动到底部。
- 选择最后一对
UITextField's之一,以便UITableView需要滚动以确保该字段可见。 - 旋转设备。
【问题讨论】:
-
虽然不理想,但对 tableView 实例的 reloadData 调用应该会有所帮助。你试过了吗?
-
自动布局不适用于 UITableView。考虑使用 CollectionView。这是一篇关于 UITableView 限制的好帖子:pspdfkit.com/blog/2017/the-case-for-deprecating-uitableview
-
您是说
UICollectionView没有这些相同类型的故障吗?如果是这样,那将是一个很好的解决方案。
标签: ios objective-c uitableview autolayout