iOS6 / iOS7 状态栏高度适配

问题原因:iOS7的状态栏(status bar)不再占用单独的20px,所以假设你在iOS6上的界面布局是正常的,那么到了iOS7上就会变成以下这个样子:

           

左边是iOS6界面布局,右边是iOS7界面布局。这时有人会想着把iOS7界面上控件总体向下移动20px,可是当Interface Builder Document改成Xcode 4.6时又变成了例如以下情况:

           

界面不会由于你在不同的Interface Builder Document值下设置不同的布局而不同,所以必须用Xcode 5的iOS 6 / 7 Deltas机制解决。

如果你之前基于的是iOS6开发的应用,此时布局是正确的,移步到控件的size inspector页面对iOS 6 / 7 Deltas属性进行设置。

由于我们做的是高度适配,所以我们用到△Y和△Height两个值,我们如今是基于iOS6去适配iOS7,所以6上正确了,7的布局就会跟状态栏重叠,故View和TableView的△Y值都应该设置为20,即6上布局在7上显示时,Y坐标下移20px,这样就不会与状态栏重叠了。可是总体下移了20px,TableView底部20px的区域将无法显示,所以这时候要单独设置TableView的△Height为-20,即在7上显示时,TableView的高度要减小20px,以使TableView所有显示在屏幕内。此时将Interface
Builder Document改为Xcode 5发现,界面显示正常,查看各控件的iOS 6 / 7 Deltas值,发现其与在Xcode 4.6下设置的值正好相反,即假设基于iOS7布局去改动iOS6的布局,那么应该将△Y设置为负值,即让控件在iOS6上显示时向上移动对应的高度。

终于的效果:

        

iOS6 / iOS7 状态栏高度适配,布布扣,bubuko.com

时间: 2024-10-10 14:34:22

iOS6 / iOS7 状态栏高度适配的相关文章

iOS6和iOS7代码的适配(2)——status bar

用Xcode5运行一下应用,第一个看到的就是status bar的变化.在iOS6中,status bar是系统在处理,应用中不需要考虑这部分,iOS7之后是应用在处理,每个ViewController都可以控制status bar. iOS7里面的status bar是透明的,会把下面的内容一起显示出来,比如我的应用色调是深色调,希望status bar上的图标是浅色的.那么我需要做两步: 1. 在info.plist中设置View controller-based status bar ap

iOS6和iOS7代码的适配(1)——坐标适配

由于iOS7里面status bar和视图是重叠在一起了,所以应用的y坐标就没法和以前一致了,需要重新计算设定.基本上,你的应用用Xcode5运行一下就能看见这个问题,这里写了一个最简单的例子,一个View上加了一个Label控件,分别在iOS6和iOS7的模拟器上的样子. 从图上明显可以看到,iOS7上的应用y坐标起始计算点是从屏幕顶点算起,而iOS6是从status bar来算起,这个原因是导致一切问题的根源. 好了,找到了问题就好办,我列举一下看到过的尝试过的方法: 1. 修改window

iOS6和iOS7代码的适配(3)——坐标适配

由于iOS7里面status bar和视图是重叠在一起了,所以应用的y坐标就没法和以前一致了,需要重新计算设定.基本上,你的应用用Xcode5运行一下就能看见这个问题,这里写了一个最简单的例子,一个View上加了一个Label控件,分别在iOS6和iOS7的模拟器上的样子. 从图上明显可以看到,iOS7上的应用y坐标起始计算点是从屏幕顶点算起,而iOS6是从status bar来算起,这个原因是导致一切问题的根源. 好了,找到了问题就好办,我列举一下看到过的尝试过的方法: 1. 修改window

iOS6和iOS7代码的适配(4)——tableView

iOS7上不少控件的样子有了变化(毕竟要扁平化嘛),不过感觉变化最大的肯定非tableView莫属.因为这个控件的高度可定制性,原先是使用及其广泛的,这样的一个改变自然也影响颇大. 1.accessoryType tableViewCell中变化最大的的accessoryType是UITableViewCellAccessoryDetailDisclosureButton了,这个在iOS6的时候是提示用户还有更多内容,iOS7里面变成了UITableViewCellAccessoryDetail

iOS6和iOS7代码的适配(6) —— NSLocalizedString

我们的应用都是需要国际化的,字符串也是重要的一环.一般来说,我们是通过一个string资源文件来实现这个目的的,我们需要支持几种语言,就把这个文件本地化多少次.代码中需要用NSLocalizedString这个宏,比如,我希望设置一个tableView的title: self.navigationItem.title = NSLocalizedString(@"test", nil); 我们这里加了英文和简体中文两种语言. 如果客户选择了我们没有本地化的语言呢?比如,我们选择了繁体中文

iOS6和iOS7代码的适配(1)

苹果的iOS7推出后,对于所有的应用来说都提出了一个天然的需求——适配不同版本的SDK.目前来说,用iOS6的SDK生成的应用,可以在iOS7的系统上跑,UI上也保持了原来的风格样式,这是苹果做的向下兼容,不过不要小看苹果推行iOS7的决心——苹果发布消息,2014年2月1日开始,AppStore上不接受不是Xcode5的提交. 这样,苹果给所有的开发者留下的就是华山一条路了——升级你的系统吧,Mac10.9都免费发布了,你还要闹哪样?! 虽然每版SDK的推出都会有适配的问题,但个人感觉这次iO

iOS6和iOS7代码的适配(5)——popOver

popOver这个空间本身是iPad only的,所以iPhone上见不到,我记得微信上有个这样的弹出框,有扫一扫等几个菜单项,估计这是腾讯自己实现的,用于菜单的扩展. popOver从iOS6到iOS7最大的变化还是扁平化,除此之外是背景改成了白色.如果你的popOver里面是一个tableView的话,那么自动会是一个半透明的显示,如果是自定义的一些内容,推荐也采用半透明的显示.                            左侧的图是iOS6的样式,右侧的图是iOS7的样式.我们看

汇总一下iOS6,iOS7的新特性

汇总一下iOS6,iOS7的新特性时间 2014-02-01 23:07:48  CSDN博客原文  http://blog.csdn.net/ioswyl88219/article/details/18896657主题 iOS开发iOS6新特性 每次ios大版本的更新,都会带来一些新的东西,对开发者来说,有利有弊. 好处是,新增了很多新的属性,控件和api,开发者权限更大了,可以轻松实现更多的功能.弊端在于,可能废除了一些旧的api接口,需要做更多的适配和兼容.通过自己开发过程中的一些经验,查

关于 Android 状态栏的适配总结

1.要求状态栏透明,我们的内容布局延伸到系统状态栏,就是人们口中说的沉浸式状态栏: Android 5.0 及其以后版本:设置属性 View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN 使得我们的内容布局可以延伸到系统状态栏,然后直接使用方法 setStatusBarColor() 把系统状态栏设置成透明就好了. Android 4.4 ~ Android 5.0 :添加了属性 getWindow().addFlags(WindowManager.LayoutParams.