Jor*_*n H 12 uitableview uiscrollview ios
如何UITableView在最顶部插入行而不会导致其余单元格被按下 - 因此滚动位置似乎根本没有变化?
就像Facebook和Twitter在发送新帖子时一样,它们被插入顶部,但滚动位置保持不变.
我的问题类似于这个问题.是什么让我的问题与这个问题的独特之处在于我没有使用具有固定行高的表 - 我正在使用UITableViewAutomaticDimension和一个estimatedRowHeight.因此,建议的答案将无法工作,因为我无法确定行高.
我已经尝试过这个不涉及行高度的解决方案,但contentSize重新加载后仍然不正确,因为该contentOffset集合的相对位置不同 - 单元格仍然被推到插入之前的位置.这是因为单元格尚未在屏幕上呈现,因此iOS无需为它计算适当的高度,直到它即将出现,因此contentSize不准确.
CGSize beforeContentSize = tableView.contentSize;
[tableView reloadData];
CGSize afterContentSize = tableView.contentSize;
CGPoint afterContentOffset = tableView.contentOffset;
tableView.contentOffset = CGPointMake(afterContentOffset.x, afterContentOffset.y + afterContentSize.height - beforeContentSize.height);
Run Code Online (Sandbox Code Playgroud)
阿兰指出rectForCellAtIndexPath哪个力量iOS要计算合适的高度.我现在可以确定插入单元格的正确高度,但是滚动视图contentSize仍然不正确,正如我遍历所有单元格并加起来大于高度的高度所证明的那样contentSize.height.因此,当我contentOffset手动设置时,它不会滚动到正确的位置.
原始代码:
//update data source
[tableView beginUpdates];
[tableView insertRowsAtIndexPaths:newIndexPaths withRowAnimation:UITableViewRowAnimationAutomatic];
[tableView endUpdates];
Run Code Online (Sandbox Code Playgroud)
在这种情况下,可以做些什么来实现所需的行为?
Zek*_*das 10
晚到派对,但即使单元格具有动态高度(又名UITableViewAutomaticDimension),也不需要迭代单元格来计算它们的大小,但只有在tableView的最开头添加项目并且没有标题时才有效,一点点数学,它可能适应每种情况:
func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) {
if indexPath.row == 0 {
self.getMoreMessages()
}
}
private func getMoreMessages(){
var initialOffset = self.tableView.contentOffset.y
self.tableView.reloadData()
//@numberOfCellsAdded: number of items added at top of the table
self.tableView.scrollToRowAtIndexPath(NSIndexPath(forRow: numberOfCellsAdded, inSection: 0), atScrollPosition: .Top, animated: false)
self.tableView.contentOffset.y += initialOffset
}
Run Code Online (Sandbox Code Playgroud)
我想你的解决方案已经差不多了。您应该将新的 Y 偏移量基于“之前”Y 偏移量而不是“之后”Y 偏移量。
..., beforeContentOffset.y + afterContentSize.height - beforeContentSize.height
(不过,您需要在重新加载数据之前保存 beforeContentOffset 点)
| 归档时间: |
|
| 查看次数: |
5218 次 |
| 最近记录: |