美文网首页
StatusBar的设置

StatusBar的设置

作者: Carson_Zhu | 来源:发表于2018-02-12 22:54 被阅读24次

    iOS 7 ~ iOS 9

    UIAplication方法
    • info.plist设置
      首先,需要在info.plist文件里将View controller-based status bar appearance设置为NO,因为它的默认值是YES,然后就可以利用UIApplication来设置了。
    • UIAplication方法设置
      // 设置StatusBar样式
      @property(readwrite, nonatomic) UIStatusBarStyle statusBarStyle;
      - (void)setStatusBarStyle:(UIStatusBarStyle)statusBarStyle animated:(BOOL)animated;
      
      // 显示、隐藏StatusBar
      @property(readwrite, nonatomic,getter=isStatusBarHidden) BOOL statusBarHidden
      - (void)setStatusBarHidden:(BOOL)hidden withAnimation:(UIStatusBarAnimation)animation;
      

    示例代码:

    - (IBAction)colorSeg1Action:(UISegmentedControl *)sender {
        if (sender.selectedSegmentIndex == 0) {
            // 设置黑色StatusBar
            // [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleDefault];
            [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleDefault animated:YES];
        }
        else {
            // 设置白色StatusBar
            // [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
            [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent animated:YES];
        }
    }
    
    - (IBAction)showSegAction:(UISegmentedControl *)sender {
        if (sender.selectedSegmentIndex == 0) {
            // 显示StatusBar
            // [[UIApplication sharedApplication] setStatusBarHidden:NO];
            [[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:UIStatusBarAnimationSlide];
        }
        else {
            // 隐藏StatusBar
            // [[UIApplication sharedApplication] setStatusBarHidden:YES];
            [[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationSlide];
        }
    }
    
    效果:

    iOS 9 之后

    UIApplication的控制状态栏的方法,在iOS 9之后被弃用了,所以iOS 9之后尽量使用重写ViewController方法的方式吧。

    ViewController方法
    • info.plist设置
      首先,要确保info.plist文件中View controller-based status bar appearanceYES,没有添加这个key的时候,默认是YES
    • 重写StatusBar方法
      // 设置黑白状态
      - (UIStatusBarStyle)preferredStatusBarStyle NS_AVAILABLE_IOS(7_0) __TVOS_PROHIBITED; // Defaults to UIStatusBarStyleDefault
      // 设置显示隐藏,Defaults to NO
      - (BOOL)prefersStatusBarHidden NS_AVAILABLE_IOS(7_0) __TVOS_PROHIBITED; 
      // 设置切换动画
      - (UIStatusBarAnimation)preferredStatusBarUpdateAnimation NS_AVAILABLE_IOS(7_0) __TVOS_PROHIBITED;
      
    • 更新StatusBar
      // UIViewController对象方法
      - (void)setNeedsStatusBarAppearanceUpdate NS_AVAILABLE_IOS(7_0) __TVOS_PROHIBITED;
      

    示例代码:

    @interface ViewController ()
    @property (nonatomic, assign) UIStatusBarStyle statusBarStyle; /**< 状态栏样式 */
    @property (nonatomic, assign) BOOL statusBarHidden; /**< 状态栏隐藏 */
    @end
    
    - (IBAction)colorSeg2Action:(UISegmentedControl *)sender {
        if (sender.selectedSegmentIndex == 0) {
            self.statusBarStyle = UIStatusBarStyleDefault;
        }
        else {
            self.statusBarStyle = UIStatusBarStyleLightContent;
        }
        [self setNeedsStatusBarAppearanceUpdate];
    }
    
    
    - (IBAction)showSeg2Action:(UISegmentedControl *)sender {
        if (sender.selectedSegmentIndex == 0) {
            self.statusBarHidden = NO;
        }
        else {
            self.statusBarHidden = YES;
        }
        [self setNeedsStatusBarAppearanceUpdate];
    }
    
    /**
     *  控制状态栏的样式
     *  要刷新状态栏,让其重新执行该方法需要调用{-setNeedsStatusBarAppearanceUpdate}
     *
     *  @return 将要显示的状态栏样式
     */
    - (UIStatusBarStyle)preferredStatusBarStyle {
        return self.statusBarStyle;
    }
    
    /**
     *  状态栏显示还是隐藏
     *  要刷新状态栏,让其重新执行该方法需要调用{-setNeedsStatusBarAppearanceUpdate}
     *
     *  @return BOOL值
     */
    - (BOOL)prefersStatusBarHidden {
        return self.statusBarHidden;
    }
    
    /**
     *  状态栏改变的动画,这个动画只影响状态栏的显示和隐藏
     *
     *  @return 动画效果
     */
    - (UIStatusBarAnimation)preferredStatusBarUpdateAnimation {
        return UIStatusBarAnimationSlide;
    }
    
    效果:

    带导航的设置

    如果我们使用UINavigationController,会发现在原来的ViewController里修改状态栏的style不起作用了,但是控制状态栏的显示和隐藏不受影响。但是使用UITabBarController依然正常,状态栏不受UITabBarController影响。

    重写UINavigaitonController- (UIStatusBarStyle)preferredStatusBarStyle方法。

    @implementation BaseNavigationController
    
    - (void)viewDidLoad {
        [super viewDidLoad];
    }
    
    - (UIStatusBarStyle)preferredStatusBarStyle {
        return [self.topViewController preferredStatusBarStyle];
    }
    
    @end
    
    效果:

    相关文章

      网友评论

          本文标题:StatusBar的设置

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