首先,Xcode4.5以后多了autoLayout这个功能,简单地说就是以前的项目的元素布局:绝对定位,可以被这种相对位置替代,不用设置具体元素的frame,可以设置元素距离父视图,或者距离另外一个子元素有多远的相对距离,我相信这个方法应该是一劳永逸的正解,也是苹果为什么4.5多这个新功能的初衷。
所以我新创建了一个项目想试验下autoLayout的作用,后来发现各种问题,最常见的原因是相对位置会产生冲突,导致设定相对位置不成功。所以现在采用了一些折中的简单方法,以后肯定还是要学习autoLayout的,目前来看,如果不设置Default-568h@2x这个图片,那么原来的3.5寸屏幕适配的应用显示在4寸屏幕当中会产生黑边儿。下面的方法是建立在设置Default-568h@2x图片的前提下的:
1.视图自适应方法
一些视图,比如UITableView和UIScrollView,会自适应的增长高度,好在宽度不用变,所以一般来说需要细节调整就可以了,比如tableView需要考虑的是背景图片尺寸会不会在4寸屏幕里不够,阴影长度是否不足等等。
2.加载两套Xib方法
以前没做过iPad和iPhone通用程序,但是据说之前的程序就是这么实现的,加载Xib的时候进行判断屏幕的尺寸,然后选择适合屏幕尺寸的视图文件加载,这么做的缺点可能就是使应用大了一些。举个例子:
首先定义判断语句,用来判断是不是iPhone5
#define iPhone5 ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(640, 1136), [[UIScreen mainScreen] currentMode].size) : NO)
然后就是加载不同的Xib
if (iPhone5) {
centerPlayControl=[[CenterPlayViewController alloc] initWithNibName:@”CenterPlayViewController4inch” bundle:nil];
[self addChildViewController:centerPlayControl];
}else{
centerPlayControl=[[CenterPlayViewController alloc] initWithNibName:@”CenterPlayViewController” bundle:nil];
[self addChildViewController:centerPlayControl];
}
3.小范围微调
上述简单解决方案一般都是利用Xib文件,对于一些通过调整Frame来进行动画的视图就需要一些精细的调整,比如一个视图,平时要在屏幕的下方,不可见,点击按钮会让其向上浮现,以前只要写两个frame就可以了,origin.y无非是需要的高度或者480,现在高度480就需要换成实际高度,获取高度可以用这个方法:
[[UIScreen mainScreen] currentMode].size.height*0.5
取出来的值是1136所以要除以一半儿处理为568
总结下来,一劳永逸的方法还是AutoLayout,以后研究