• 颜色是这样的,so,status bar和navigation bar颜色是一致的,


    虽然用户看来,iOS7默认样式的状态栏和导航栏时连在一起的,但是实际上导航栏的位置和大小是和之前系统版本一样的,依然是贴在状态栏下面,依然是高 44px;之所以用户看来它们是连在一起,这是因为UINavigationBar里面的_UINavigationBarBackground定位在y 方向-20px的位置,然后高度增加到64px,这样就可以同时充当了两者的背景。

    而变透明之后就很容易和后面的内容混淆,虽说一般应用不会把内容和状态栏叠合在一起,但是至少,现在的情况是,默认是会叠合的,开发需要从20px像素以下开始布局页面元素才能避免。
     
    [navCtrl.navigationBar setBackgroundImage:[UIImage imageNamed:@"nav_background"] forBarMetrics:UIBarMetricsDefault];是一样的,
     
    This is the default behavior for UIViewController on iOS 7. The view will be full-screen which means the status bar will cover the top of your view.
     

    If you have a UIViewController within a UINavigationController and the navigationBar is visible, you can have the following code in your viewDidLoad or have a background image for navigationBar do the trick.

    self.edgesForExtendedLayout =UIRectEdgeNone;

    If you have navigationBar hidden, then you have to adjust all the UIView elements by shifting 20 points. I dont't see any other solution. Use auto layout will help a little bit.

    Here is the sample code for detecting the iOS version, if you want to backward compatibility.

    -(void) viewWillAppear:(BOOL)animated {[super viewWillAppear:animated];if([[[UIDevice currentDevice] systemVersion] floatValue]>=7.0){CGRect screen =[[UIScreen mainScreen] bounds];if(self.navigationController){CGRect frame =self.navigationController.view.frame;
                frame.origin.y =20;
                frame.size.height = screen.size.height -20;self.navigationController.view.frame = frame;}else{if([self respondsToSelector:@selector(containerView)]){UIView*containerView =(UIView*)[self performSelector:@selector(containerView)];CGRect frame = containerView.frame;
                    frame.origin.y =20;
                    frame.size.height = screen.size.height -20;
                    containerView.frame = frame;}else{CGRect frame =self.view.frame;
                    frame.origin.y =20;
                    frame.size.height = screen.size.height -20;self.view.frame = frame;}}}}

    苹果为了让深色浅色背景均能让状态栏内容清晰显示,提供两种状态栏样式:
     
    UIStatusBarStyleDefault = 0 黑色文字,浅色背景时使用
    UIStatusBarStyleLightContent = 1 白色文字,深色背景时使用
     
    而以下两个旧状态栏样式将被废弃:
    UIStatusBarStyleBlackTranslucent = 1
    UIStatusBarStyleLightContent = 2
     
    还有,iOS7中我们通过ViewController重载方法返回枚举值的方法来控制状态栏的隐藏和样式。
    首先,需要在Info.plist配置文件中,增加键:UIViewControllerBasedStatusBarAppearance,并设置为YES;
    然后,在UIViewController子类中实现以下两个方法:
    1 - (UIStatusBarStyle)preferredStatusBarStyle
    2 {
    3     return UIStatusBarStyleLightContent;
    4 }
    5  
    6 - (BOOL)prefersStatusBarHidden
    7 {
    8     return NO;
    9 }
     
  • 相关阅读:
    java.lang.ClassCastException: java.util.HashMap$Values cannot be cast to java.util.List 转换异常
    React Swiper轮播图(二)
    超详细带你入门开发一个超实用的浏览器插件
    手臂太细如何增加纬度?这5个手臂锻炼动作,让你的手臂变粗壮
    2021百度世界大会精华总结(AI应用向)
    1、saltstack 安装部署
    MySQL的varchar(10)能存多少个汉字
    学习资料总结
    基于Spark的数据工厂(Data Factory):从设计到实现
    IntelliJ IDEA创建maven web项目(IDEA新手适用)
  • 原文地址:https://www.cnblogs.com/guligei/p/3359339.html
Copyright © 2020-2023  润新知