颜色是这样的,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}
 

转载于:https://www.cnblogs.com/guligei/p/3359339.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值