自定义状态栏
有时候,需要在状态栏上显示一些自定义信息,比如新浪微博的官方iOS客户端:告知用户信息处于发送队列、发送成功或者发送失败。
如上图,通过在状态栏显示自定义信息,可以给用户友好又不影响软件使用的提示。
为此,我们显得定义一个自定义状态栏类,包含一个显示信息的Label:
@interface CustomStatusBar : UIWindow { UILabel *_messageLabel; } - (void)showStatusMessage:(NSString *)message; - (void)hide; @end
self.frame = [UIApplication sharedApplication].statusBarFrame; self.backgroundColor = [UIColor blackColor];
系统定义了三个层次如下,
const UIWindowLevel UIWindowLevelNormal; const UIWindowLevel UIWindowLevelAlert; const UIWindowLevel UIWindowLevelStatusBar; typedef CGFloat UIWindowLevel;
self.windowLevel = UIWindowLevelStatusBar + 1.0f;
隐藏状态栏
如果想要隐藏状态栏,有两种做法:
状态栏是否隐藏默认由控制器管理,也就是说,当前状态栏所对应的控制器决定是否隐藏状态栏。
UIViewController中提供了一个prefersStatusBarHidden方法用于查看当前的控制器显示的状态栏是否隐藏,默认这个方法返回的是NO,也就是不隐藏。但是并没有提供相应的方法来设置隐藏状态栏。
这种情况我们可以重写prefersStatusBarHidden方法,通过修改它的返回值达到目的。
- (BOOL)prefersStatusBarHidden { return YES; }
另一种做法是不让控制器来决定是否隐藏状态栏,而是让[UIApplication sharedApplication]来决定。
[UIApplication sharedApplication].statusBarHidden = YES;
Setting statusBarHidden does nothing if your application is using the default UIViewController-based status bar system.
View controller-based status bar appearance
- (UIViewController *)childViewControllerForStatusBarHidden - (UIViewController *)childViewControllerForStatusBarStyle
- (UIViewController *)childViewControllerForStatusBarHidden { return nil; }
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:notice#nhooo.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。