因为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寸屏