美文网首页
UIStatusBar相关操作

UIStatusBar相关操作

作者: 朦胧之眼 | 来源:发表于2019-05-28 12:59 被阅读0次

以下所有操作都是在IOS10.0之后操作的,IOS10之前的就不讨论了!

  1. 首先我们讨论下其高度,在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))
  1. 我们修改下文字图标颜色,我们可以从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的字体及图标的颜色了!

  1. 设置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;
    }
}
  1. 设置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的隐藏和显现。

  1. 网络加载标识符
 [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:NO];
  [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:YES];

相关文章

网友评论

      本文标题:UIStatusBar相关操作

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