美文网首页
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