iOS6和iOS7代码的适配(1)
2014-04-10 19:12
197 查看
苹果的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]来获得。
iOS6和iOS7代码的适配(2)
用Xcode5运行一下应用,第一个看到的就是status bar的变化。在iOS6中,status bar是系统在处理,应用中不需要考虑这部分,iOS7之后是应用在处理,每个ViewController都可以控制status bar。
iOS7里面的status bar是透明的,会把下面的内容一起显示出来,比如我的应用色调是深色调,希望status bar上的图标是浅色的。那么我需要做两步:
1. 在info.plist中设置View controller-based status bar appearance为NO
2. 在AppDelegate.m文件中,didFinishLaunchingWithOptions方法里面增加
[objc]
view plaincopy
![](https://code.csdn.net/assets/CODE_ico.png)
![](https://code.csdn.net/assets/ico_fork.svg)
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
[[UIApplication sharedApplication] setStatusBarHidden:NO];
这样,应用中status bar就统一改成了浅色的风格。
如果你的应用有些viewController中status bar需要特殊设置,那么就需要在相应的viewController中处理,这就需要重写两个API,preferredStatusBarStyle和prefersStatusBarHidden。
[objc]
view plaincopy
![](https://code.csdn.net/assets/CODE_ico.png)
![](https://code.csdn.net/assets/ico_fork.svg)
-(UIStatusBarStyle)preferredStatusBarStyle
{
return UIStatusBarStyleLightContent;
}
[objc]
view plaincopy
![](https://code.csdn.net/assets/CODE_ico.png)
![](https://code.csdn.net/assets/ico_fork.svg)
- (BOOL)prefersStatusBarHidden
{
return YES;
}
然后在需要刷新状态栏样式的时候,调用[self setNeedsStatusBarAppearanceUpdate]方法实现刷新。
从iOS7来说,status bar是浮动在上层的,这样如果window本身下移20个pixel,那么也可以完美的显示。这个方法在理论上应该成立,我努力尝试过,但没有成功,如果有成功的大大请告诉我应该怎么做。
这样,苹果给所有的开发者留下的就是华山一条路了——升级你的系统吧,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]来获得。
iOS6和iOS7代码的适配(2)
用Xcode5运行一下应用,第一个看到的就是status bar的变化。在iOS6中,status bar是系统在处理,应用中不需要考虑这部分,iOS7之后是应用在处理,每个ViewController都可以控制status bar。
iOS7里面的status bar是透明的,会把下面的内容一起显示出来,比如我的应用色调是深色调,希望status bar上的图标是浅色的。那么我需要做两步:
1. 在info.plist中设置View controller-based status bar appearance为NO
2. 在AppDelegate.m文件中,didFinishLaunchingWithOptions方法里面增加
[objc]
view plaincopy
![](https://code.csdn.net/assets/CODE_ico.png)
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
[[UIApplication sharedApplication] setStatusBarHidden:NO];
这样,应用中status bar就统一改成了浅色的风格。
如果你的应用有些viewController中status bar需要特殊设置,那么就需要在相应的viewController中处理,这就需要重写两个API,preferredStatusBarStyle和prefersStatusBarHidden。
[objc]
view plaincopy
![](https://code.csdn.net/assets/CODE_ico.png)
-(UIStatusBarStyle)preferredStatusBarStyle
{
return UIStatusBarStyleLightContent;
}
[objc]
view plaincopy
![](https://code.csdn.net/assets/CODE_ico.png)
- (BOOL)prefersStatusBarHidden
{
return YES;
}
然后在需要刷新状态栏样式的时候,调用[self setNeedsStatusBarAppearanceUpdate]方法实现刷新。
从iOS7来说,status bar是浮动在上层的,这样如果window本身下移20个pixel,那么也可以完美的显示。这个方法在理论上应该成立,我努力尝试过,但没有成功,如果有成功的大大请告诉我应该怎么做。
相关文章推荐
- iOS6和iOS7代码的适配(2)——status bar
- iOS6和iOS7代码的适配(3)——坐标适配
- iOS6和iOS7代码的适配(3)——坐标适配
- iOS6和iOS7代码的适配(1)
- iOS6和iOS7代码的适配(1)
- iOS6和iOS7代码的适配(3)——坐标适配
- iOS6和iOS7代码的适配(2)——status bar
- iOS6和iOS7代码的适配(3)——坐标适配
- iOS6和iOS7代码的适配(2)——status bar
- iOS6和iOS7代码的适配(2)——status bar
- iOS6和iOS7代码的适配(4)——tableView
- iOS6和iOS7代码的适配(5)——popOver
- iOS6和iOS7代码的适配(6) —— NSLocalizedString
- iOS6和iOS7代码的适配——坐标适配
- iOS6和iOS7代码的适配(1)
- iOS6和iOS7代码的适配(1)
- iOS6和iOS7代码的适配(6) —— NSLocalizedString
- iOS6和iOS7代码的适配(3)——坐标适配
- iOS6和iOS7代码的适配(5)——popOver
- iOS6和iOS7代码的适配(2)——status bar