关于iOS7 适配的一些总结

来源:互联网 发布:黑马java培训 编辑:程序博客网 时间:2024/06/05 04:17

一、版本判断

  1. 一般情况下大家都是选择一个宏定义  
  [[[UIDevice currentDevice]systemVersion]floatValue]<7.0  
  floor(NSFoundationVersionNumber)>NSFoundationVersionNumber_iOS_6_1
在程序中需要区分系统版本的地方使用,如界面布局时(如StatusBar),如方法调用时(有些方法在7上是弃用的)


二、界面布局初始位置

  1. 无NavgationBar 时,iOS6上我们布界面时,是从StatusBar 之后开始的,即界面原点(0.0)是从整个屏幕(0.20)算起的,而iOS7状态栏默认全透明,则是从屏幕(0.0)点开始算起。
举个例子:UILabel *label = [[UILabel alloc]initwithFrame:CGRectMake(30,0,120,40)];
iOS6效果:
iOS7效果:
         
2.   有NavigationBar时,这个就需要了解一下了。首先是我们可以设置Barhidden,当它为YES时,参考无NavigationBar。
当NavigationBar没有隐藏时,在iOS6上就是从NavigationBar之后开始算布局原点,而iOS7上仍然是从屏幕(0,0)开始算起。只不过此时的NavigationBar有一层毛玻璃的效果。如我们建立一个Label,frame:(30,45,120,40)就会有一下的效果,如图:
在图上,我们可以看到,navbar下面会有淡淡的蓝色,但是这样的话我们在做UI界面时就会显得很繁琐,需要计算一个坐标,区分iOS6和iOS7的坐标不同,此时我们有另一个方法可以很好的解决,即 self.navigationController.navigationBar setTranslucent:NO ,就是将navigationBar设置为不透明,此时,无论是iOS6还是iOS7,坐标原点都是从NavBar下面开始算起了,这样我们也不用去区分了。
3. 当然,如果只是这样,似乎并没有什么大问题,可是在我们使用当中,就会逐渐发现tableView也很逗逼。在iOS7上,建立一个tableView ,UITableView *mTable = [UITableView alloc]initWithFrame:self.view.frame],无NavBar时,它是和iOS6一样的效果,是这样的:

可是有NavBar时,同样是(0,0)的坐标,它又是从NavBar之后算起了,如图:

这样我们如果在一个界面要定制多种UI,其中又涉及UITableView的时候,就需要加以区分了。


这只是一个小总结,以供初学者学习,大牛们就一笑而过了,当然,有不对的地方,还望指正。


0 0
原创粉丝点击