iOS6和iOS7代码的适配(1)

苹果的iOS7推出后,对于所有的应用来说都提出了一个天然的需求——适配不同版本的SDK。目前来说,用iOS6的SDK生成的应用,可以在iOS7的系统上跑,UI上也保持了原来的风格样式,这是苹果做的向下兼容,不过不要小看苹果推行iOS7的决心——苹果发布消息,2014年2月1日开始,AppStore上不接受不是Xcode5的提交。

这样,苹果给所有的开发者留下的就是华山一条路了——升级你的系统吧,Mac10.9都免费发布了,你还要闹哪样?!

虽然每版SDK的推出都会有适配的问题,但个人感觉这次iOS7的SDK的变化是最大的。为了适配iOS7,每个应用都需要做一些事情:

1. icon的变化

iOS7的图标和原先也有变化,这点在Xcode5里面体现的很清楚。

iPhone上来说,需要增加120X120的图标;iPad上来说,需要增加76X76和152X152的图标。并且图标风格推荐和iOS7尽量贴近,苹果仍然会帮你做圆角化(圆角的半径不同了),但阴影效果等不会帮做了。(设计表示躺枪啊)

官方有一份文档可以参考:https://developer.apple.com/library/ios/documentation/UserExperience/Conceptual/MobileHIG/IconMatrix.html#//apple_ref/doc/uid/TP40006556-CH27

2. 启动界面

启动界面需要增大一些,把原先的status bar的区域加进去。如果原先你的设计就是全屏的,这一步就可以省略了。

3. Retina和4寸屏幕的支持

目前的应用这个应该都有支持了吧,如果你不支持iPhone5的话,AppStore上已经不能提交了。

4.调整layout

由于status bar的原因,坐标计算的原点有变化,很多时候会发现UI上有不少重叠的现象,这个就需要调整了。由于同时要适应iOS6和iOS7,这个调整相应也有一些难度。

苹果官方推荐使用autolayout来帮助做自动的适应(3.5寸和4寸的屏幕)。iOS7里面的autolayout功能说增强了不少,以前我也不愿意使用这个功能,以后的应用中打算试试。

5. Bar Button

Bar Button是指那些系统预设的用在Toolbar或者NavigatorBar上的按钮,UI上有明显改变,大小也有一定的变化,tintColor也变成了barTintColor。

6. 其他UI的细节

UI的变化真的很多,大的框架不会变化,但各处细节改变很多,这个也没法穷举了,打算后面慢慢总结,把自己遇到的分享出来。

iOS6的应用运行在iOS7的系统上时,会模拟出一个iOS6的环境,所以应用仍然会拟物化的显示,UI的控件也都显示iOS6的风格。不过苹果官方说这样效率较低,不建议这么做,目前的情况时过渡,相信会逐渐减少。

不过我iOS6的应用也可以在iOS7系统上运行时也出现过异常。异常是在progressView上出现的,在界面上显示和iOS7一样很细,解决方法是在代码里把frame显式指定了一下。

iOS系统的判定,这个可以通过[[[UIDevice currentDevice] systemVersion] floatValue]来获得。

http://blog.csdn.net/sakulafly/article/details/17795285

iOS6和iOS7代码的适配(1)

时间: 2024-11-06 06:54:07

iOS6和iOS7代码的适配(1)的相关文章

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

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

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代码的适配(5)——popOver

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

ios6与iOS7 的图片适配

iOS6 与IOS7 适配时 应在Main.storybord中ViewController中顶部第4选项中的ViewController-->Extend Edges中的 全部选项设为不选中状态(Under Top Bars ,Under Bottom Bars,Under Opaque Bars),避免图片向四周扩展 如果在运行有问题,在顶部的第一个选项中的Use Auto Layout 设为不选中 再运行时记得清楚缓存 ios6 导航栏背景的出图规格 非Retina: 320 X 44 p

简单的IOS6和IOS7通过图片名适配

在美工提供图片图片的前提下,只需要下面给UIImage做一个分类,就可以简单的实现在6和7上的图片名字适配. 比如美工在6上面提供的图片叫common_button_big_red_highlighted.png,7上的名字[email protected],通过下面的简单代码就可以实现6和7的图片适配,而且在调用的时候十分方便,只需要通过[UIImage imageWithNamed:]就可以,跟体统自带的[UIImage imageNamed:]类似: + (UIImage *)imageW

iOS6 / iOS7 状态栏高度适配

问题原因:iOS7的状态栏(status bar)不再占用单独的20px,所以假设你在iOS6上的界面布局是正常的,那么到了iOS7上就会变成以下这个样子:             左边是iOS6界面布局,右边是iOS7界面布局.这时有人会想着把iOS7界面上控件总体向下移动20px,可是当Interface Builder Document改成Xcode 4.6时又变成了例如以下情况:             界面不会由于你在不同的Interface Builder Document值下设置不