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