关于iOS7 适配的一些总结

本文总结了iOS6与iOS7在界面布局上的差异,包括StatusBar位置变化、NavigationBar布局调整以及TableView坐标计算,并提供了相应的解决方法。

一、版本判断

  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的时候,就需要加以区分了。


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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值