以下所有操作都是在IOS10.0之后操作的,IOS10之前的就不讨论了!
- 首先我们讨论下其高度,在iphone是否有刘海,statusBar的高度是不一样的,在没有刘海的情况下其高度为20,在有刘海的情况下其高度为44,在目前的所有机型中我们可以通过以下的宏在计算:
//屏幕的宽度
#define kScreenWidth [[UIScreen mainScreen] bounds].size.width
//屏幕的款高度
#define kScreenHeight [[UIScreen mainScreen] bounds].size.height
//判断是否是手机
#define kIs_iphone (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)
//判断是否是iphonex
#define kIs_iPhoneX kScreenWidth >=375.0f && kScreenHeight >=812.0f&& kIs_iphone
/*状态栏高度*/
#define kStatusBarHeight (CGFloat)(kIs_iPhoneX?(44.0):(20.0))
- 我们修改下文字图标颜色,我们可以从UIStatusBarStyle可以看到:
typedef NS_ENUM(NSInteger, UIStatusBarStyle) {
UIStatusBarStyleDefault = 0, // Dark content, for use on light backgrounds
UIStatusBarStyleLightContent NS_ENUM_AVAILABLE_IOS(7_0) = 1, // Light content, for use on dark backgrounds
UIStatusBarStyleBlackTranslucent NS_ENUM_DEPRECATED_IOS(2_0, 7_0, "Use UIStatusBarStyleLightContent") = 1,
UIStatusBarStyleBlackOpaque NS_ENUM_DEPRECATED_IOS(2_0, 7_0, "Use UIStatusBarStyleLightContent") = 2,
} __TVOS_PROHIBITED;
其一共有两种颜色,一种和黑色也就是Dark,另外一种为白色也是就是Light,并且我们会在API中看到设置其属性的方法是过时的:
[[UIApplication sharedApplication] setStatusBarStyle:<#(UIStatusBarStyle)#>]
直接写出解决方案:
- 首先,在.plist中添加
View controller-based status bar appearance
并且把它的值设置为YES。
- 重写UIViewController方法:
-(UIStatusBarStyle)preferredStatusBarStyle{
return UIStatusBarStyleLightContent;
}
- 如果有UINavigationController,需要重写UINavigationController的
- (UIViewController *)childViewControllerForStatusBarStyle{
return self.topViewController;
}
好了,这时候我们就可以根据我们的需要,通过重写UIViewController中的preferredStatusBarStyle的字体及图标的颜色了!
- 设置statusBar背景颜色:
- 没有导航栏的情况下,直接设置就可以了:
self.view.backgroundColor = [UIColor redColor];
- 当有UINavigationController,我们可以直接通过设置nav的
[self.navigationController.navigationBar setBarTintColor:[UIColor blueColor]];
设置nav背景颜色的同时设置statusBar的背景颜色!
- 当有UINavigationController的时候,想设置单独颜色的话:
//设置状态栏颜色
- (void)setStatusBarBackgroundColor:(UIColor *)color {
UIView *statusBar = [[[UIApplication sharedApplication] valueForKey:@"statusBarWindow"] valueForKey:@"statusBar"];
if ([statusBar respondsToSelector:@selector(setBackgroundColor:)]) {
statusBar.backgroundColor = color;
}
}
- 设置statusBar的隐藏和显现
- 使用过时代码如下(方法已经过时,但是仍然可用):
[[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:UIStatusBarAnimationFade];
- 实现以下方法(该方法,在没有刘海的屏幕上是可以的,大师在x系列中就不管用了):
//实现隐藏方法
- (BOOL)prefersStatusBarHidden{
return YES;
}
- 直接设置UIView的隐藏(这种方法是暴力隐藏,都管用),如何代码:
UIView *statusBar = [[[UIApplication sharedApplication] valueForKey:@"statusBarWindow"] valueForKey:@"statusBar"];
[statusBar setHidden:YES];
- 在plist里面配置如下代码(将程序中的所有的statusBar隐藏掉):
<key>UIViewControllerBasedStatusBarAppearance</key>
<false/>
<key>UIStatusBarHidden</key>
<true/>
在这种情况下如果,还想将statusBar显示出来,需要调用,虽然已经过时,但是仍然可用:
[[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:UIStatusBarAnimationFade];
使用以上方法主要注意的是:这个YES和NO设置的是整个应用的statusBar的隐藏和显现。
- 网络加载标识符
[[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:NO];
[[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:YES];