【问题标题】:Tell if UITableView has scrolled to top判断 UITableView 是否滚动到顶部
【发布时间】:2013-03-24 06:19:49
【问题描述】:

我试过这个:

- (void)scrollViewDidScrollToTop:(UIScrollView *)scrollView

但是当我将表格视图滚动到顶部时它没有触发。

- (void)scrollViewDidScroll:(UIScrollView *)scrollView

会触发,所以委托不是问题。

在 viewDidLoad 我还设置了[myTbl setDoesScrollToTop:YES];

【问题讨论】:

  • 当你触摸状态栏时,scrollViewDidScrollToTop 会触发吗?

标签: ios objective-c xcode cocoa-touch


【解决方案1】:

当表格视图进入导航栏并启用安全区域布局指南时,可以进行以下检查:

if (tableView.contentOffset.y + tableView.safeAreaInsets.top) == 0 { ... }

奖励:如果您想避免在加载内容之前获得 0,请检查 contentSize:

if tableView.contentSize.height > 0 && 
    ((tableView.contentOffset.y + tableView.safeAreaInsets.top) == 0) { ... }

【讨论】:

    【解决方案2】:

    scrollViewDidScrollToTop: 方法在用户单击状态栏并且scrollsToTop 属性设置为YES 时触发。来自文档:

    滚动视图在滚动到内容顶部时发送此消息。如果内容的顶部已经显示,它可能会立即调用它。要使滚动到顶部手势(点击状态栏)生效,UIScrollView 的 scrollsToTop 属性必须设置为 YES。

    如果用户手动滚动到顶部,它不会触发。如果要处理这种情况,则必须实现scrollViewDidScroll: 方法并自己检查滚动是否在顶部。

    您可以通过contentOffset 属性检查这一点,例如:

    if (scrollView.contentOffset.y == 0) { // TOP }
    

    【讨论】:

    • 很好,解释了很多。
    • 我想补充一点,“top”为 0 不一定总是正确的,具体取决于 tableview 的内容插入和周围的上下文,因此您可能需要考虑这一点。
    • @joakim 在我的情况下,我确实使用scrollView.contentOffset.y <= 0 作为scrollViewDidScroll 方法中的条件
    猜你喜欢
    • 2015-10-04
    • 1970-01-01
    • 2010-10-18
    • 2010-11-06
    • 2018-11-02
    • 1970-01-01
    • 1970-01-01
    • 2016-09-04
    • 1970-01-01
    相关资源
    最近更新 更多