【问题标题】:Scroll to top load more滚动到顶部加载更多
【发布时间】:2016-07-04 09:33:14
【问题描述】:

我已经搜索了很多,但我没有找到一种明确的方法来创建 滚动到顶部加载更多或无限滚动,就像您在聊天中看到的那样,例如 whatsapp。 我正在尝试使用 scrollViewDidScroll 方法,根据当前页面再次加载数据

    if self.tableView.contentOffset.y == 0 {
        loadData(++currentPage, itemsPerPage: pageSize)
    }

但是处理新数据和滚动位置的方式对我来说有点奇怪,所以主要问题是在我的 UITableView 顶部以有效的方式添加内容

//更新

在 ScrollViewDidScroll 方法中:

在 contentOffset.y 到达 0 位置后,我正在尝试添加新消息,因为它必须出现在 UITableView 的顶部,因此在索引 0 处插入消息是我发现这样做的唯一方法。但是有一件事,在拉取新数据并重新加载 UITableView 后,滚动位置仍然显示在可见屏幕上,最后拉出的消息在顶部。这不是预期的行为,请看这张松弛的频道图片

当滚动达到适当的偏移量时,新数据被拉出,屏幕显示在同一条消息上,但现在看起来是滚动位置

所以,我认为在这种情况下重新加载整个表格视图是问题所在,但是如何正确提取 tableView 中的数据以获得这种预期的滚动行为?

例如在whatsapp中是一样的

【问题讨论】:

  • 我以前从未解决过这个问题。听起来很有趣。到底什么不适合你?您是否无法检测到用户何时滚动到顶部,或者您无法在视图顶部添加更多内容?
  • 所以主要问题是以一种有效的方式添加内容,在我的 UITableView 的顶部
  • 你发现了吗?我正在处理类似的问题..

标签: ios swift uiscrollview swift2 infinite-scroll


【解决方案1】:

我建议在 UITableView 委托的方法中进行预取

    func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) {

      //your code ()
          if indexPath.row == datasource.count - 3 {
            loadMore()
         }   
     }

这可以让您避免滚动视图的奇怪行为。

【讨论】:

  • 但这将适用于滚动到底部加载更多,到达最后一个单元格,我试图在滚动到顶部时这样做,就像whatsapp聊天一样
  • 对不起,错过了这个。是的,那么你真的将不得不依赖 tableView 的偏移量。您可以使用 KVO 订阅偏移量的更改
  • 订阅偏移量的变化是没问题的,因为我使用的是UITableView,棘手的部分是如何处理数据,并在顶部添加
  • @Steve 你有什么污点吗?如果是,请在这里发帖
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-19
  • 1970-01-01
  • 2016-04-07
相关资源
最近更新 更多