美文网首页
修改状态栏隐藏和颜色

修改状态栏隐藏和颜色

作者: guoguojianshu | 来源:发表于2021-03-24 21:22 被阅读0次

    info.plist文件中 View controller-based status bar appearance-> YES,

    则控制器对状态栏设置的优先级高于application, 此时 prefersStatusBarHidden和preferredStatusBarStyle方法会起作用

    View controller-based status bar appearance-> NO,则以application为准,控制器设置状态栏prefersStatusBarHidden是无效的的根本不会被调用

    1.在View controller-based status bar appearance-> YES,的时候,状态栏是由控制器单独控制的,

    • 定义一个属性
    @property(nonatomic,assign) BOOL statusHiden;
    
    • 重新状态栏方法
    - (BOOL)prefersStatusBarHidden{
    
         return self.statusHiden;
     }
    
    • 改变状态栏的显示和隐藏
    self.statusHiden = YES;
    // 刷新状态栏
    [self performSelector:@selector(setNeedsStatusBarAppearanceUpdate)];
    

    2.View controller-based status bar appearance-> NO,时候由application控制,各个控制器之间会相互影响,

    [[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationNone];
    

    以上push的时候,使用没有问题,但是在model之后的控制器prefersStatusBarHidden方法不起作用

    如果修改了 toVC 的 modalPresentationStyle,一定要修改 toVC 的 modalPresentationCapturesStatusBarAppearance 属性为 YES,上面的代码才有效!

    例如,present 某个控制器的时候,想让当前控制器不消失,就要修改 toVC 的 modalPresentationStyle 属性为 UIModalPresentationOverFullScreen。当 toVC 发生某些事情就隐藏状态栏,需要这样写:

    // fromVC.m 
    
    UIViewController *toVC = [UIViewController new];
    // 当前控制器不消失,toVC 透明的时候能看到
    toVC.modalPresentationStyle = UIModalPresentationOverFullScreen;
    // 是否接管状态栏外观,即重写的 prefersStatusBarHidden 等方法是否会被调用
    toVC.modalPresentationCapturesStatusBarAppearance = YES;
    [self presentViewController:toVC animated:YES completion:nil];
    
    // toVC.m 
    
    // 重写
    - (BOOL)prefersStatusBarHidden {
        return self.shouldHiddeStatusBar;
    }
    
    // 某个事件处理函数
    - (void)buttonClick {
        // 刷新状态栏
        [self setNeedsStatusBarAppearanceUpdate];
    }
    

    modalPresentationCapturesStatusBarAppearance这个是关键!!!!

    相关文章

      网友评论

          本文标题:修改状态栏隐藏和颜色

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