【问题标题】:How to remain the old visible cell's position after inserting new cells at the top of the UITableView在 UITableView 顶部插入新单元格后如何保持旧可见单元格的位置
【发布时间】:2011-04-08 23:45:56
【问题描述】:

假设我有一个表格视图,我想实现这样的东西:

  • 表格视图默认包含n 单元格。
  • 新单元格将添加到表格视图的顶部(头部)。
  • 表格视图的数据源是一个可变数组。

问题是当我使用[tableview reloadData]时,新数据总是显示在tableview的顶部,但我想要的是保留旧位置的旧可见单元格,这意味着重新加载数据后不会刷新。我尝试了一些解决方案,我发现如果我在尾部添加新单元格并更新表格视图,旧的可见单元格将保持旧位置而无需任何额外的努力。但是如果我在顶部添加新单元格,我不知道如何将旧的可见单元格保留在旧位置。

作为参考,我认为 iPhone 的官方 Twitter 应用程序只是在时间线视图中实现了我想要的,但我不知道如何存档。

各位,有什么想法吗?

非常感谢。

-托尼·许

[更新] 在文本中描述我想要的内容有点困难。我添加了一些图片。

如图[链接在下面],默认单元格是从加利福尼亚部分开始的,我想在“Brea”之前添加3个新单元格,我想要的是在我添加“New cell 1,2,3之后”,单元格“Brea”仍然保持原来的位置。也就是说,更新后的新单元格1,2,3是不可见的。

对不起,因为我没有足够的声誉来使用图片,请访问此网址http://i.stack.imgur.com/S9jJl.png

【问题讨论】:

  • 我不太明白你的意思,你的意思是你的表格视图是自动滚动到顶部的吗?
  • 我认为这就是他的意思,如果他在顶部添加单元格。
  • 这取决于你如何实现 tabieview 数据源协议。
  • @vodkhang,@Rudiger,是的,这就是我的意思,新单元格会自动显示在 tableview 的顶部。
  • @Toro,对不起,我不明白你的意思。我检查了 UITableViewDataSource 中所有可能的方法,我找不到任何与单元格位置相关的方法。你是不是特别想说tableView:cellForRowAtIndexPath:

标签: iphone uitableview


【解决方案1】:

刚刚在这里用代码 sn-ps 回答了一个类似的问题

Keep uitableview static when inserting rows at the top

基本上:

  • 将滚动偏移量保存在您将调用 beginUpdate: 的位置。
  • 您可以将单元格的高度添加到保存的偏移量中,而不是调用 InsertCell。
  • 在您应该调用 endUpdate: 的地方,调用 reloadData,然后滚动保存的偏移量,没有动画。

【讨论】:

    【解决方案2】:

    我已经想出了如何实现这个,希望这可以帮助其他想要同样效果的人。

    重点是UITableViewUIScrollView 的子类。因此,UITableView 具有UIScrollView 的所有属性,尤其是可以为此工作的属性:UITableView.contentOffset,也可以使用[UITableView setContentOffset:animated:] 对其进行动画处理。

    要存档与 Twitter for iPhone 官方应用相同的效果,我们需要知道每次添加或删除多少偏移量。记住前一个偏移量并设置偏移量 +/- 增量偏移量而不使用动画。

    完成。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-01-19
      • 1970-01-01
      • 2016-05-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多