开启点击状态栏回顶功能
监听状态栏点击事件
- 系统已经给我们提供了一个回顶的功能属性, 只要点击了状态栏 scrollView (包含子类)就能滚动回顶部
// When the user taps the status bar, the scroll view beneath the touch which is closest to the status bar will be scrolled to top, but only if its `scrollsToTop` property is YES, its delegate does not return NO from `shouldScrollViewScrollToTop`, and it is not already at the top. // On iPhone, we execute this gesture only if there's one on-screen scroll view with `scrollsToTop` == YES. If more than one is found, none will be scrolled. @property(nonatomic) BOOL scrollsToTop __TVOS_PROHIBITED; // default is YES.- 注意: 属性上面的说明, 在屏幕中只有一个 scrollView 的 scrollsToTop == YES, 如果有多个的时候, 点击状态栏时, 也是不会回顶
- 因此, 只能保留当前显示的 TableView 是的scrollsToTop == YES ; 其他的 scrollView.scrollsToTop == NO
- 设置父控件 _scrollView.scrollsToTop = NO;
// 取消回顶操作 _scrollView.scrollsToTop = NO;- 不管在是点击了标题按钮, 还是拖拽切换显示界面, 都会调用到点击按钮监听调用的方法
- 因此, 在这个方法中做控制子控制器 View -->>tableView -->> scrollView 的 scrollsToTop 属性
// 方法一: 前提: 父控件 scrollsToTop == NO; // 控制scrollView的scrollsToTop属性 for (NSInteger i = 0; i < self.childViewControllers.count; i++) { UIViewController *childVc = self.childViewControllers[i]; // 如果控制器的view没有被创建,跳过 if (!childVc.isViewLoaded) continue; // 如果控制器的view不是scrollView,就跳过 if (![childVc.view isKindOfClass:[UIScrollView class]]) continue; // 如果控制器的view是scrollView UIScrollView *scrollView = (UIScrollView *)childVc.view; scrollView.scrollsToTop = (i == index); // if (i == index) { // 被点击按钮对应的子控制器 // scrollView.scrollsToTop = YES; // } else { // scrollView.scrollsToTop = NO; // } } // 在上面这个方法中虽然做了判断过滤掉内有创建的子控件的 View // 但是, 如果所有子控制器的 View 都创建了, 这时候就要遍历5 次// 我的方法二: 更加简洁, 性能更高的方法 // 前提: 父控件必须的 scrollsToTop == NO; // 必须是懒加载子控制器的 View // 所有对应的子控制器 view 都必须是 scrollView 或者 scrollView 的子类 _previousClickTitleButton.selected = NO; // 取消上一个的子控制的 view 点击状态栏回顶功能 UIScrollView *ChildView = (UIScrollView *)self.childViewControllers[_previousClickTitleButton.tag].view; ChildView.scrollsToTop = NO; titleButton.selected = !titleButton.selected; _previousClickTitleButton = titleButton; // 在这里添加对应的控制 View 到 scrollView 中 [self addChildViewToScrollView:titleButton.tag]; ChildView = (UIScrollView *)self.childViewControllers[_previousClickTitleButton.tag].view; ChildView.scrollsToTop = YES;