zoukankan      html  css  js  c++  java
  • 颜色是这样的,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 }
     
  • 相关阅读:
    新版Unity的一些小玩意儿
    Three.js踩坑笔记
    Unity 接入腾讯云COS对象存储
    通过贝塞尔曲线编辑曲线
    利用ZXing.Net生成和识别二维码
    开源免费的安卓投屏工具-Scrcpy
    Unity Reflection Probe使用入门
    Unity VFX踩坑
    windows上通过自定义后缀文件启动Unity应用
    应用于Oculus Quest的VR头显应用
  • 原文地址:https://www.cnblogs.com/guligei/p/3359339.html
Copyright © 2011-2022 走看看