图文讲解如何解决App的iOS 7顶部状态栏适配问题

至今很多iOS App还要照顾到iOS 7进行最低的版本适配,而iOS7开始status bar的实际屏幕占用情况与iOS 6等不尽相同,这里我们就来以图文讲解如何解决App的iOS 7顶部状态栏适配问题

首先说明下,ios7中,由于status bar不再占用单独的20px,如果app需要同时支持ios7和ios6.1以下,那就需要适配下了,适配开始:
先看用xcode新建项目后 IOS7和IOS6上的的运行效果:
ps:一个empty application 里面+了一个rootcontroller,作为window的根控制器,view里面放了一个tableview;


是不是遇到的IOS7的新问题,状态栏跟tableview重叠了,OK,看见这个不想看到的结果,下面我们就开始正式的解决掉这个招人不喜欢的效果。
第一步:不要勾选xib中的Use Autolayout,如下图:

第二步:第二步:选择View as “ios6.1 and Earlier”,还是上图位置处;
第三步:在Size Inspector中,有一ios6/7 Deltas:分别表示在PosX的增量、PosY的增量、宽度增量、高度增量。

ps:在“ios6.1 and Earlier”模式下,由于status bar的高度为20,所以当app运行在ios7.0模式下时,需要view向下移动20像素,因此在ΔY上设置为20.
tableView坐标向下移动了20,由于整个屏幕的高度是不变的,所以在“ios7.0 and Later”模式下,需要将tableView的高度减去20像素,即在“ios6.1 and Earlier”模式下,设置tableView的ΔHeight为 -20。如果不设置ΔHeight,tableView底部会有20像素是不可见的,可以测试demo看看。
***注***:Δ,正数表示增,负数表示减。
第四步:ok,设置完成,到IOS上看效果:

是不是神奇的发现跟以前的有似曾相识的赶脚呢。。。这样“ios6.1 and Earlier”和“ios7.0 and Later” UI布局便统一了。

另一种方法
上面通过XIB的设置达到了状态栏和view重合的问题,接下来我们讲一讲网传的修改window frame方法。
先上步骤:
第一:在appdeletage里面 添加如下代码:


  if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0) {
  self.window.frame = CGRectMake(0.0f,20.0f,self.window.frame.size.width,self.window.frame.size.height-20.0f);
  }

2.在info.plist文件里面 属性:View controller-based status bar appearance  值设为NO。
下面看效果:

在看下图,你会发现一个问题:

这是什么原因导致的呢?我发现,由于window你又548变成了528吧,但是你发现tableview的高度还是548,导致了有20个像素不能显示。那有的同学会说,直接改成528不就得了么,是的,可以改,改后你发现IOS7上确实没有了缺像素的问题,但是在IOS6有直接缺半截,看下图:

所以呢,由我亲自测试,这种方法想要适配IOS7和IOS6有点不太靠谱。
最后解释一下几个名词设置的作用:


- (UIStatusBarStyle)preferredStatusBarStyle
{
 return UIStatusBarStyleLightContent;
}
- (BOOL)prefersStatusBarHidden
{
 return NO;
}

在plist中设置View controller-based status bar appearance  值设为YES..
这些的作用是:基于controller,动态控制statusbar的隐藏与样式。

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

这篇文章给大家分享了如何利用iOS实现图片六边形阴影的效果,文中给出实现的示例代码,对大家的理解和学习很有帮助,有需要的可以参考借鉴,下面来一起看看吧。
刚刚进入iOS开发行业,发现开发中要用到大量的block回调,由此可见它的重要性。本文主要讲的是 Block 回调的使用,以及 Block 是如何实现这种神奇的回调两部分来讲的,下面来一起看看吧。
很多朋友都反馈,发现了iOS9升级到iOS10推送功能不正常的问题,所以这篇文章总结了一下要点,亲们可以根据以下步骤,逐步排查问题,也可以逐步实现iOS10的推送功能。下面来一起看看吧。
在开发iOS的时候经常需要获取当前View所在的控制器,下面小编给大家分享个方法,文章给出了示例代码,对大家的学习和理解很有帮助,下面来一起看看吧。
这篇文章给大家分享了一种利用iOS实现只有底部边框线的输入框,其实这个效果也挺常见的,本文给出了示例代码,下面来看看如何实现这种效果。
这篇文章主要介绍了iOS 委托与文本输入(内容根据iOS编程编写) 的相关资料,需要的朋友可以参考下