您的位置:首页 > 其它

解决点击状态栏时ScrollView自动滚动到初始位置失效办法:总结优化篇

2016-03-14 12:52 531 查看
前言:
项目中用到如题功能,就是当用户滑动到多页列表时,可直接点击系统状态栏自动滚回到第一行,即初始化位置,本是系统自带方法,但是理论和实践总是不那么完美的配合,故此做个总结;
问题:
情况一:本页面控制器只有一个UIScrollView(UITableView、UICollectionView 、UITextView 、UIWebView 等一切继承自UIScrollView的控件);
这种情况可以直接利用官方建议直接解决即可,设置:crollview.scrollsToTop = YES(默认就是YES),如果该控件内部含有子控件,比如常见的UTTextView,可以设置子控件为NO就能解决,此种情况比较简单,详细可参看:http://xbiii3s.iteye.com/blog/1314517,笔者不再多说;
情况二:本页面控制器有多个UIScrollView(UITableView、UICollectionView 、UITextView 、UIWebView 等一切继承自UIScrollView的控件);
这种情况就发现自带方法以及失效,原理也很简单,就是系统发现有多个控件,不知道滚动那个到顶部,比如常见的网易新闻客户端左右滑动多个UITableView式,解决原理也还是可以理解的,就是能定位到当前是那个UIScrollView显示在keyWindow上,然后对它进行单独设置滚动方法,就是个循环遍历的过程,具体详情可以参看:http://www.cocoachina.com/ios/20150807/12949.html,笔者就不多说原理了,这里只是补充用该大牛方式遇到的问题:
1,设置后程序崩溃;
2,解决1后出现状态栏变黑;
3,编译提示找不到某个方法;
逐一解决,这里参考代码:
1,

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
//延后处理,如果你崩溃,可以不需要延后
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
[WNXTopWindow show];
});
}


2,

+ (void)initialize {
window_ = [[UIWindow alloc] init];
window_.frame = CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, 20);

//添加一句代码,这里设置成透明色即可
window_.backgroundColor = [UIColor clearColor];

window_.windowLevel = UIWindowLevelAlert;
[window_ addGestureRecognizer:[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(windowClick)]];
}


3,

+ (void)searchScrollViewInView:(UIView *)superview {
for (UIScrollView *subview in superview.subviews) {

// 直接用self 调用当前类方法,可解决编译问题
// 如果是scrollview, 滚动最顶部
if ([subview isKindOfClass:[UIScrollView class]] && [self isShowingOnKeyWindow:subview]) {
CGPoint offset = subview.contentOffset;
offset.y = - subview.contentInset.top;
[subview setContentOffset:offset animated:YES];
}// 递归继续查找子控件
[self searchScrollViewInView:subview];
}}


至此,解决了该需求,涉及原理和代码,请参考如上博客,也感谢两位作者分享。
另外推荐优质APP:IT面试宝典
iOS(http://dwz.cn/1EOMlZ

Android(http://dwz.cn/1Z9xjW
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: