一行代码集成点击状态栏,滚动视图当前内容滚动到顶部
只有一个ScrollView的时候
我们在使用App的时候,经常会看到这样的效果,当我们点击状态栏的时候,我们已经滚动过的内容,会自动的滚回顶部,例如:设置界面:
其实这个功能是系统默认实现的,不需要自己写代码。
当点击状态栏的时候自动滚回顶部是因为UIScrollView
的scrollsToTop
的属性为YSE
1 | @property(nonatomic) BOOL scrollsToTop __TVOS_PROHIBITED; // default is YES. |
居然系统已经实现了这个功能,那么为什么还要自己实现呢?
这个是因为,系统实现的是有缺陷的。
当ScrollView超过一个的时候
下面是苹果对scrollsToTop属性的解析说明
1 | // 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. |
那就是当前视图下,超过一个ScrollView的时候,即使你将scrollsToTop的值设置为YES,但是在点击状态栏的时候,不会有一个ScrollView会滚动到顶部。
这个时候,如果我们需要这个功能,那么就要我们手动实现了。
针对这个,我封装了一个小框架“一行代码完成“点击状态栏滚动视图当前内容滚动到顶部”,框架集成了CocoaPods,方便使用,一行代码可以实现这个小功能。
使用LYTopWindow
第一步:使用CocoaPods导入LYTopWindow
在 Podfile
中进行如下导入:
1 | pod 'LYTopWindow' |
然后使用 cocoaPods
进行安装:
如果尚未安装CocoaPods
, 运行以下命令进行安装:
1 | gem install cocoapods |
安装成功后就可以安装依赖了:
建议使用如下方式:
1 | # 禁止升级CocoaPods的spec仓库,否则会卡在 Analyzing dependencies ,非常慢 |
如果提示找不到库,则可去掉--no-repo-update
1 | pod update |
第二步:集成点击状态栏当前内容滚动到顶部
导入头文件
1 | #import <LYTopWindow.h> |
在AppDelegate.m中方法application:didFinishLaunchingWithOptions:中添加以下代码
1 | [[LYTopWindow sharedTopWindow] setClickStatusBarBlock:^{ |
注意:如果需要实现其他功能效果,可以将这句代码替换成其他需要的代码
1 | [LYTopWindow sharedTopWindow] searchAllScrollViewsInView:[UIApplication sharedApplication].keyWindow]; |
框架里面有个小Demo,可以自行实验,欢迎Issues
LYTopWindow地址:https://github.com/DeveloperLY/LYTopWindow
如果想了解LYTopWindow的实现原理,可以查看我的另一篇文章《点击状态栏,滚动视图返回顶部的实现》