动画隐藏 statusBar 以及隐藏 stastusBar 带来的隐藏问题

最近写了一个仿微信的图片查看效果.上方是一个自定义的导航栏和 statusBar 下方是一个 scrollerView的图片分页查看效果.点击图片时导航栏和 状态栏(statusBar)会一起动画向上隐藏 ,再次点击显示 .具体的流程 以及代码实现如下 

1.首先我们要在 info.plist 文件中加入字段View controller-based status bar appearance 设置为 YES 原因在于 我们要在视图控制器中设置 statusBar的隐藏效果 默认的情况下 视图控制器对 statusBar 的优先级 是低于[UIApplication shareApplication]的 


2.设置 statusBar 的隐藏样式 这个需要回调方法返回  具体 重写回调方法

-(UIStatusBarAnimation)preferredStatusBarUpdateAnimation{

return UIStatusBarAnimationSlide;

}


3重写statusBar 的是否隐藏的回调方法  这里我们用一个全局变量来控制 

-(BOOL)prefersStatusBarHidden{

return _isHiden;

}

4在图片的触摸方法中 调用 statusBar 的状态效果 是隐藏  还是 显示,代码中的_top 是我自定义的导航栏,目的是 导航栏和 statusBar 一起隐藏

-(void)tapClick{

_isHiden=!_isHiden;

[UIView animateWithDuration:0.3 animations:^{

if (_isHiden) {

_top.transform=CGAffineTransformMakeTranslation(0, -64);

}else{

_top.transform=CGAffineTransformMakeTranslation(0, 0);

}

[self setNeedsStatusBarAppearanceUpdate];

}];

}

这样下来 看似完成了 ,但是还有一个大坑, 如下 未隐藏的时候的效果

黑色背景和图片之间的视图 为 scrollerView 我设置的零零点为(0.0)尺寸为屏幕大小 但是系统却在最下方  少显示了20高度的视图 图片设置的为 scrollerView 的(0.0)但是 显示的时候 却从(0.20)开始显示  

隐藏后却又显示正常

并且在切换的过程中,因为系统要给它进行重新布局,所以会出现一个闪现的效果,实在烦人。最后的解决方法是 这个属性 self.automaticallyAdjustsScrollViewInsets=NO;

原因在于 视图控制器默认的 自身子视图的 scrollerView 会有一个调节作用  自动给 scrollerView 添加一个内边距,内边距的大小 取决于系统视图 在这里就体现在 statusBar ,隐藏后 因为没有了 statusBar 所以重复调节 出现闪现效果 只要设置为 NO 就一切正常啦

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 14,194评论 4 61
  • 写点东西,本身是一件需要非常集中精力的事情,奈何大规模集中化的时间对我来说显得那么奢侈。 记得以前写作课上,我曾尝...
    风起天神阅读 1,625评论 1 0
  • 仰卧在床上,一边吃着朋友特意买给我的牛肉干,一边喝着朋友特意买给我的可乐,满满的幸福感就这样借着一口二氧化碳...
    不贪文艺阅读 3,355评论 0 0
  • 你好,这里是夏洛克,一只初入手帐坑的萌新。于某时某地被手帐吸引,毅然跳坑。 我尝试着用手帐记录我的生活,但平淡的生...
    夏洛克5254阅读 1,397评论 1 3