天天看點

一個View根據裝置尺寸的不同加載不同的XIB檔案

最近在做一個項目要求在iPhone和iPad上都能很好的顯示,但是實際适配的時候不管是使用storyboard還是純代碼寫都比較麻煩;于是就在想可不可以讓一個view檔案對應兩個或多個XIB檔案(view_iphone.xib 和 view_ipad.xib);

1、首先工程中要支援iPad和iPhone:設定targets->Deployment Info ->Devices 選擇Universal

一個View根據裝置尺寸的不同加載不同的XIB檔案

2、正常建立view檔案和一個對應的view.xib檔案(比如先選一個iPhone的xib),在xib檔案上拖拽好需要的控件并添加好限制,把需要的控件關聯到view.m裡(這一步按照正常的流程把所有的工作都做完);

一個View根據裝置尺寸的不同加載不同的XIB檔案

此時在iPhone上運作效果是比較好的,但是在iPad上顯示就很不協調了;

3、選中步驟2建立的.xib檔案,File —> Duplicate… —> Save As: view_iPad.xib,這樣你建立一個名稱為view_iPad.xib 且和view.xib一樣的檔案;

一個View根據裝置尺寸的不同加載不同的XIB檔案

4、修改view_iPad.xib對應的view as:iPad;并調整控件的限制以适應目前的裝置;

一個View根據裝置尺寸的不同加載不同的XIB檔案

5、選中view_iPad.xib,右鍵Open As —> Source Code 打開對應的XML檔案:把<document type=“com.apple.InterfaceBuilder3.CocoaTouch.XIB” 改成 <document type=“com.apple.InterfaceBuilder3.CocoaTouch.iPad.XIB”;

6、在view.m中加載xib檔案時:選擇性的加載對應的檔案

NSArray *nibAry = [[NSBundle mainBundle]loadNibNamed:[[UIDevice currentDevice].model isEqualToString:@"iPad"]?@"OBMissionTypeInfoView_ipad":@"OBMissionTypeInfoView" owner:self options:nil];
OBMissionTypeInfoView *createMissionTypeView = [nibAry objectAtIndex:0];