今天花了一天的时间对IOS6和IPHONE5进行适配 [由于自己用的机器是IPHONE5,所以没出什么问题,但是在IPHONE4上就出问题了,都是IOS7版本,还有一台IPOD是IOS6版本,也出问题~ 哎,一开始没注意适配,现在得花这精力去修改~ 特总结一下,防止以后犯错误,提高工作效率,加油!]
由于习惯问题,都在视图控制器下的viewDidLoad去创建自定义的UI元素,因为IOS版本问题,所以self.view.frame也会不同,如果要实现相同的UI布局,用代码进行测试,发现以下4种情况
3.5寸IPHONE
IPHONE5,IPHONE5S设备
结论:针对有导航栏的视图控制器,IOS6系统下self.view下的subviews的Origin.y是从导航栏底部开始计算的,高度是整个屏幕高度减去20后的值为参照,IOS7系统下是从0开始计算的,高度是整个屏幕高度为参照!
适配方案探讨:
1.在每个视图控制器的viewDidLoad去判断IOS版本和IPHONE尺寸,创建不同的frame,去设置每个UI元素 [当前由于时间问题,采取这种方案,发现略显繁琐,不易维护]
2.在每个视图控制器下加入以下代码:
1 if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7) { 2 self.edgesForExtendedLayout = UIRectEdgeNone; 3 }
这样不管在IOS6还是IOS7下,元素的Origin.y都是一样的,不用再去分别设置了
然后只要控制每个元素的高度就行了,如下图:
3.在第二种方法前提下,在每个视图控制器下重写loadView方法
1 -(void) loadView 2 { 3 [super loadView]; 4 CGRect rect= [[UIScreen mainScreen] applicationFrame]; 5 UIView* view=[[UIView alloc] initWithFrame:rect]; 6 view.backgroundColor=[UIColor purpleColor];//根据项目需求,修改你自己的背景颜色 7 self.view=view; 8 [view release]; 9 }
这样第二种方法里的高度设置都可以设置一样的,不用分别设置了~~
高度以屏幕高度减去20后的值为参照
好了,目前总结就是这样了,没看网上的描述,全是自己推敲出来的,或许会有更好的解决方案,欢迎大家提出! 本来才进入IOS开发阵营不久,之前做WP和WIN8的开发,也欢迎小伙伴们交流下~ 始终有一颗微软粉的心啊 !
IOS版本和IPHONE5适配总结