【发布时间】:2019-06-12 07:00:18
【问题描述】:
我有一个 UITableView,其中包含一堆单元格。
如果用户单击第二个单元格,则第一个单元格应设置动画并显着扩展其高度,并将所有其他单元格向下推,使用户的滚动位置保持在同一位置。当两个单元格都在屏幕上时,我的代码 100% 正确工作。 UITableView的contentSize显着增长,contentOffset没有变化。
但是,如果用户向下滚动,只有第二个单元格可见,当他们点击它时,第一个单元格会展开到屏幕外,用户什么也不会发生。
UITableView 的 contentSize 不变,contentOffset 也不变。一旦用户稍微向上滚动并看到展开单元格的底部,contentSize 和 contentOffset 就会更新以反映第一个单元格确实要大得多的事实(但从用户的角度来看没有任何变化)
在展开前后对单元格的索引路径调用heightForRowAtIndexPath会返回预期值。
我的代码有很多事情要做,但应该是动画扩展的主要部分在这里:
UIView animateWithDuration:0.3
animations:^{
performSelectorOnMainThread(@selector(updateItemHeights:), withObject: nil, waitUntilDone: YES)
}
completion:^(BOOL finished){}]
以及updateItemHeights的实现:
beginUpdates
endUpdates
self.contentSize = sizeThatFits([contentSize.width, CGFLOAT_MAX])
iOS 似乎试图通过允许上方的单元格展开来将用户保持在当前上下文中。
如何让屏幕外单元格将其他单元格向下推?
【问题讨论】:
标签: ios iphone uitableview