iOS开发技术

动画隐藏 statusBar 以及隐藏 stastusBar 带

2017-02-14  本文已影响527人  9c9fec99824c

最近写了一个仿微信的图片查看效果.上方是一个自定义的导航栏和 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 就一切正常啦

上一篇下一篇

猜你喜欢

热点阅读