【问题标题】:how to detect when i scrolled below the UITableView AND snaps back如何检测我何时在 UITableView 下方滚动并回弹
【发布时间】:2013-05-09 19:53:39
【问题描述】:

我正在尝试使用 facebook 类型加载更多数据,现在它可以工作,但在设备上非常滞后,因为它要求服务器获取任何不存在的内容,然后一直调用向下滚动功能(因为不知何故当我重新加载数据时,它会滚动到顶部)。如果有办法防止滚动到顶部,那就太好了。但我的主要问题是,有没有办法检测我何时向下滚动,并且 LET GO(停止滚动)就像我滚动过去我所拥有的一样,然后它回到它的位置,然后调用我的方法......目前它当滚动大于 UITableView 的高度时不断调用代码

-(void)scrollViewDidScroll:(UIScrollView *)scrollView
{
    CGFloat height = scrollView.frame.size.height;

    CGFloat contentYoffset = scrollView.contentOffset.y;

    CGFloat distanceFromBottom = scrollView.contentSize.height - contentYoffset;

    if(distanceFromBottom < height)
    {
        [getMessage removeAllObjects];
        [self loadMessages];
        [self.tableView reloadData];
        [self scrollAllTheWayDown];
    }
}

【问题讨论】:

标签: ios scroll


【解决方案1】:

UIScrollViewDelegate 方法

- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate;

做你想做的事。它在用户停止滚动后被调用,您可以在此时检查 scrollOffset 以查看是否应该触发刷新代码。 (您将使用 scrollViewDidScroll 来更新视图以显示如果他放手将发生用户更新)

【讨论】:

  • 尝试将您的 -(void)scrollViewDidScroll:(UIScrollView *)scrollView 更改为 - (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate; 而不进行任何代码更改,您应该会在预期的时候得到刷新。
  • 我的其余评论是,如果您想在用户滚动到末尾时显示箭头或某事,您可以在 scrollViewDidScroll 中执行此操作,因为您希望用户看到箭头出现当他滚动时,而不是当他完成时。
  • 啊,我明白了。好主意。我可以在那里放一个标签,从“下拉”变为“正在加载......”在这个意义上正确吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-10-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-24
  • 2010-12-07
  • 1970-01-01
相关资源
最近更新 更多