美文网首页iOS开发技术
动画隐藏 statusBar 以及隐藏 stastusBar 带

动画隐藏 statusBar 以及隐藏 stastusBar 带

作者: 9c9fec99824c | 来源:发表于2017-02-14 10:36 被阅读527次

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

    相关文章

      网友评论

        本文标题:动画隐藏 statusBar 以及隐藏 stastusBar 带

        本文链接:https://www.haomeiwen.com/subject/kllxwttx.html