iOS进阶架构师之路iOS学习笔记

ios开发之-点击屏幕顶部StatusBar让UIScrollV

2016-03-14  本文已影响5616人  coderboy001
CGPoint offect = scrollView.contentOffset;
offect.y = - scrollView.contentInset.top;
[scrollView setContentOffset:offect animated:YES];

当控制器上只有一个UIScrollView时,系统就会去遍历主窗口上所有的view,当遍历到那个UIScrollView时,就会为他设置:

CGPoint offect = scrollView.contentOffset;
offect.y = - scrollView.contentInset.top;
[scrollView setContentOffset:offect animated:YES];

当我们一点击statusBar时,就会执行上述代码让UIScrollView回滚到初始位置

Paste_Image.png Paste_Image.png Paste_Image.png
- 解决办法:
  - 1.既然这个问题是window引起的,那么自然可以从window下手,window一显示出来,控制器中控制statusBar样式的代码就要失效,因此解决之道就是让window隐藏就可以了
  - 2.自iOS7之后,statusBar的样式是交给控制器来管理的,但是在iOS7以前statusBar的样式是由UIApplication来管理的,既然window一显示出来,控制器中控制statusBar样式的代码就要失效,那么我们可不可以重新把statusBar样式交给UIApplication来管理呢?? 你控制器失效就失效,哥把statusBar的样式重新交给UIApplication来管理

  - 答案是:YES,我们可以把statusBar的样式重新交给UIApplication来管理,只需要在Info.plist文件中添加如下字典:
    ![Paste_Image.png](https://img.haomeiwen.com/i1432650/70a76621f5a011b6.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
这样statusBar的样式就会被UIApplication来管理了,我们可以通过:
``` objc
[UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleLightContent;

去控制statusBar的样式,值得注意的是,由于此时我们对statusBar的操作是应用级别的,因此整个应用程序中的statusBar的样式都被修改为UIStatusBarStyleLightContent,但是有的地方是不能用UIStatusBarStyleLightContent的,因此我们要在合适的地方(比如这个控制器被弹出屏幕的时候),将statusBar的样式复原:

[UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleDefault;
上一篇下一篇

猜你喜欢

热点阅读