判断UITableView是否已滚动到顶部

Jos*_*hDG 26 xcode cocoa-touch objective-c ios

我试过这个:

- (void)scrollViewDidScrollToTop:(UIScrollView *)scrollView
Run Code Online (Sandbox Code Playgroud)

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

- (void)scrollViewDidScroll:(UIScrollView *)scrollView
Run Code Online (Sandbox Code Playgroud)

是否解雇代表不是问题.

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

Ell*_*rry 62

scrollViewDidScrollToTop:当用户单击状态栏并将scrollsToTop属性设置为时,将触发该方法YES.来自文档:

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

如果用户手动滚动到顶部,则不会触发.如果要处理这种情况,则必须实现该scrollViewDidScroll:方法并检查滚动条是否位于顶部.

您可以通过contentOffset属性进行检查,例如:

if (scrollView.contentOffset.y == 0) { // TOP }
Run Code Online (Sandbox Code Playgroud)

  • 我想补充一点,根据 tableview 的内容插入和一般的周围上下文,“top”为 0 不一定总是正确的,因此您可能需要考虑这一点。 (3认同)

小智 5

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

if (tableView.contentOffset.y + tableView.safeAreaInsets.top) == 0 { ... }
Run Code Online (Sandbox Code Playgroud)

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

if tableView.contentSize.height > 0 && 
    ((tableView.contentOffset.y + tableView.safeAreaInsets.top) == 0) { ... }
Run Code Online (Sandbox Code Playgroud)