天天看点

一个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];