iOS 7 8 升级问题总结

来源:互联网 发布:php开发扫码支付 编辑:程序博客网 时间:2024/06/06 20:16
最近几个项目做iOS8的升级。把遇到的典型问题总结下。

下面的代码都是在记事本里敲得,可能有语法之类的错。

升级前: 支持iPod4(iOS6),iPod5(iOS6) 和iOS(iOS7)。特别说明一点的是,项目的iOS7兼容是用Xcode4.6做的。所以虽然项目也能在iOS7的设备上运行,但界面元素的风格跟iOS6完全一样。

做iOS8升级的时候,用的是Xcode6.1。因为之前的iOS7兼容用的并不是iOS7的元素,导致iOS8升级遇到了一些本应该在iOS7升级过程中就修复的问题,在这里一起列了出来。

问题1: NavigationBar和ToolBar的背景色变得很淡,跟设置的颜色值不一致。
解决:在iOS7中,给NavigationBar和ToolBar设置背景颜色的API换成了barTintColor:(UIColor*)color.在iOS6中,用的是tintColor:(UIColor *)color.

问题2: iOS7之后,屏幕元素向上移了。
解决:多半情况下,在有问题的viewDidLoad:方法里,加下面代码:
if([UIDevicecurrentDevice].systemVersion.floatValue >= 7.0) {
   self.edgesForExtendedLayout = RectxxxNone; //不记得值的名字了
}

问题3:StatusBar背景色变了,跟NavigationBar的颜色一致(如果有NavigationBar的话),或者跟界面的背景色相同。需要改变StatusBar背景色。
解决:
3.1. 在iOS7之后,StatusBar的背景色默认是由NavigationBar的颜色(如果有NavigationBar的话),或跟界面的背景色决定的。可以在项目的.plist文件中加"Viewcontroller-based status barappearance",值为NO。这样StatusBar颜色就不会受以上两者的影响了。然后可以用[[UIApplicationsharedApplication]setStatusBarStyle:UIStatusBarStyleLightContent];去设StatusBar的背景色。通过这一步,基本上就可以让StatusBar的风格跟iOS6一致了。
3.2.如果以上方案还不能满足自定义的需求,我们有个项目是这样做的:创建一个新的UIView,这个UIView的frame跟StatusBar的一样,背景色设备想要的颜色,然后在AppDelegate中app将要启动的时候通过windowaddSubView:把新view加到StatusBar的位置,这样在左右的屏里都可以显示了。这个view也不会盖住StatusBar上的时间之类的内容,因为设的的是backgroudColor。或者根据需要在某个屏里添加这样一个view。
UIView*statusView = [[UIViewalloc]initWithFrame:CGRectMake(0,0,20,320)];
[self.windowaddSubView:statusView]; //在AppDelegate中添加
[self.viewaddSubView:statusView]; //在具体的屏里添加

问题4:隐藏status bar.
解决:
4.1. 在iOS7之前,调用[[UIApplicationsharedApplication]setStatusBarHidden:YES];即可。不过这在iOS7中不管用。
4.2. 在iOS7之后,要分两步。
    a. 重写 -(BOOL)prefersStatusBarHidden; 返回YES。
    b. 在viewWillAppear:(BOOL)animated;中调用[selfsetNeedsStatusBarAppearanceUpdate];viewDidLoad/viewDidAppear中调用应该也可以,没试。
针对问题4,有个特别的现象导致在iOS7中4.2的方法不管用。如果在屏里添加了一个新的UIWindow,windowLevel= UIStatusBarWindowLevel +1。如果需要隐藏StatusBar的屏里有这么一个自己加的UIWindow的话,StatusBar是隐藏不掉的。在这里可以把UIWindow改成UIView,代码再做相应修改,把原来在UIWindow中显示的元素放到UIView中。

0 0
原创粉丝点击