因为iPhone5 的新分辨率,最近大家都忙着在更新应用以支持新的分辨率,虽然新版的xcode4.5 可以直接在xib里面创建 4寸屏的view,但实际上它却没那么智能,它支持4寸屏了,但拉出的控件即便是在4寸屏幕的环境下它的frame值仍然是以4寸屏幕为基础的,也就是说如果你的view的frame 为 (0,0,320,548),设置了高度宽度适应,它在3.5寸屏幕环境运行的时候这个view的值仍然是(0,0.320,548),就算它的值看起来在3.5寸下完全显示,但请不要被它的假像所蒙骗了.

有可能你觉得这个值没什么关系,当然,如果你的所有控件都是通过xib拉出来的,那没什么.但很多时候情况并不是那么简单,有时你要将一个view通过代码放在一个你想要的位置,那时候你就需要它的坐标了.在以前,你可以把它写死,因为以前是统一分辨率,但现在不同了.不同分辨率下控件的坐标和大小要进行调整.

本人虽然曾经做过android的开发,但是对多分辨率的处理却不是很在行,想了几种方案,觉得最方便的是以下这种.

在controller的viewDidLoad 或者 loadView方法中设定 self.view.frame

Objective-c代码  
//适应屏幕分辨率 CGRect frame = self.view.frame; frame.size.height = [UIScreen mainScreen].bounds.size.height - 20; self.view.frame = frame;

因为在当前界面是带有状态栏,所以在高度那里减去20 ,如果是带有导航条的,就再减去44,如果带有tabbar的,就减去48

在此方法设定之后,controller 的  view.frame就是实际当中的大小,也就是说它的值是准确的,那接下来加入其他view的时候一切的计算都将会变得简单很多.

比如创建一个tableView,上边距为20,下边距20

Objective-c代码  
UITableView *tableView = [[UITableView alloc]initWithFrame:CGRectMake(0, 20, 320, self.view.frame.size.height - 40) style:UITableViewStylePlain];  [self.view addSubview:tableView];

效果如下:

4寸屏幕                                                                         3.5寸屏

ce59b4a5-5fb8-3c42-abd1-edae87d67d2e.png
61e7af31-2b4b-3506-a4e4-7644f124fbbf.png