我正在使用iOS 8新的自调整大小单元.视觉效果很好——每个细胞都有合适的大小.然而,如果我try 使用scroll to the last row,表视图似乎不知道它的正确大小.这是一个bug还是有解决方案?

以下是如何重现问题:

使用这个项目-TableViewCellWithAutoLayoutiOS8(参考this SO answer),我得到了预期的自动调整大小的单元格.

但是,如果我调用scrollToRowAtIndexPath函数,如下所示:

tableView.scrollToRowAtIndexPath(NSIndexPath(forRow: model.dataArray.count - 1, inSection: 0), atScrollPosition: .Bottom, animated: true)

do not get to the last row岁——这只让我走了一半.

即使try 使用这样的低级函数:

tableView.setContentOffset(CGPointMake(0, tableView.contentSize.height - tableView.frame.size.height), animated: true)

结果并不像预期的那样,它不会结束.如果我点击它很多次或等待片刻,它最终会到达正确的位置.似乎是桌面视图.内容大小.高度设置不正确,所以iOS"不知道"最后一个单元格在哪里.

非常感谢您的帮助.

谢谢

推荐答案

Update: Jun 24, 2015

从iOS 9.0 SDK开始,苹果已经解决了其中大部分漏洞.从iOS 9 beta 2开始,所有问题都已修复,包括滚动到顶部&;没有动画的表视图底部,在表视图中间滚动时调用reloadData.

以下是尚未解决的剩余问题:

  1. 使用较大的估计行高时,使用动画滚动到最后一行会导致表格视图单元格消失.
  2. 当使用较小的估计行高时,使用动画滚动到最后一行会导致表格视图过早完成滚动,使一些单元格位于可见区域下方(最后一行仍在屏幕外).

新的错误报告(rdar://21539211)这些问题与动画滚动有关.

Original Answer

这是一个带有表视图行高估计的Apple bug,自从iOS 7首次引入该功能以来,它就一直存在.在这个问题上,我直接与Apple UIKit工程师和开发人员传道者合作过——他们承认这是一个bug,但没有任何可靠的解决方法(除了禁用行高估计),而且似乎对修复它并不特别感兴趣.

请注意,该漏洞以其他方式表现出来,例如在部分或完全向下滚动时,当您调用reloadData时,表格视图单元格消失(例如contentOffset.y明显大于0).

显然,对于iOS 8自动调整大小的单元,行高估计至关重要,所以苹果真的需要尽快解决这个问题.

我在2013年10月21日以Radar#15283329的名义提交了这一问题.Please do file duplicate bug reports so that Apple prioritizes a fix.

你可以附上这个简单的sample project来演示这个问题.它直接基于苹果自己的代码.

Swift相关问答推荐

try 在SwiftUI中做5星评级

通过SwiftUI中的列表 Select 从字典中检索值

插入/删除视图时的Swiftui动态过渡

在SWIFTUI&39;S视图修改器中使用等待关键字

SWIFT异步/等待,多个监听程序

在一行语句中比较Date.now的相等性是否安全

使 tabview 垂直将视图移动到右侧 swift ui

使用UICollectionViewFlowLayout创建水平的UICollectionView,并同时将单元格对齐到左边和右边的能力

使第二个视图变灰 SwiftUI

如何在 macOS/AppKit 的窗口选项卡上接受拖动项目的放置?

Pod lib lint 命令找不到 watchos 模拟器

从 Swift 列表中的行中检索值

Swift Swiftui - 将 colored颜色 保存到 UserDefaults 并从 @AppStorage 使用它

AES 加密和解密

在 ViewController 的 UICollectionView 中拉取刷新

如何快速截取 UIView 的屏幕截图?

更改日期 Select 器的文本 colored颜色

无法推断泛型参数的参数

NSLocationWhenInUseUsageDescription 警告,但我已经添加了

在 NSDictionary 中检测 Null 值