iOS 7 8 升级问题总结

最近几个项目做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([UIDevice currentDevice].systemVersion.floatValue >= 7.0) {
    self.edgesForExtendedLayout = RectxxxNone; //不记得值的名字了
}

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值