StatusBar的设置

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

效果:
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容