最近項目需要兼容iPad,由于項目使用xib和Storyboard,故記錄對iPhone和iPad的適配!
iPhone和ipad適配分為兩種種:
1.為iPad和iPhone分別開發不同的項目(適合兩個項目區別比較大,要分別發布)
2.一個項目同時兼容iPhone和iPad;
本文只對第二種情況(一個安裝包同時兼容iPhone和ipad)
要在一個工程中兼容ipad和iPhone步驟:
1.設置targets->Deployment Info ->Devices 選擇Universal
Storyboard:
2.選中storyboard文件,假設名字為Main.storyboard;
3.File--->duplicate,將文件命名為Main_ipad.storyboard:(注意一點要設置為_ipad,需要和下面的代碼匹配)
4.右鍵Main_ipad.storyboard,open as ---> source code,找到targetRuntime,將其修改為targetRuntime="iOS.CocoaTouch.iPad"
5、調用storyboardWithName方法改為storyboardAdapter;
針對5需要為UIStoryboard建類別UIStoryboard+Adapter
UIStoryboard+Adapter.h
#import
@interfaceUIStoryboard (Adapter)
+ (UIStoryboard*_Nullable)storyboardAdapter:(nonnullNSString*)name bundle:(nullableNSBundle*)storyboardBundleOrNil;
@end
UIStoryboard+Adapter.m
#import"UIStoryboard+Adapter.h"
@implementationUIStoryboard (Adapter)
+ (UIStoryboard*)storyboardAdapter:(NSString*)name bundle:(nullableNSBundle*)storyboardBundleOrNil
{
UIStoryboard*storyBoard;
if((UI_USER_INTERFACE_IDIOM()==UIUserInterfaceIdiomPad)) {
NSString*ipad = [namestringByAppendingString:@"_ipad"];
storyBoard = [UIStoryboardstoryboardWithName:ipadbundle:storyboardBundleOrNil];
}
else
{
storyBoard = [UIStoryboardstoryboardWithName:namebundle:storyboardBundleOrNil];
}
returnstoryBoard;
}
@end
使用方法:
UIStoryboard*storyBoard = [UIStoryboard storyboardAdapter:@"Main"bundle:nil];
Xib:
前四步一樣,第五步:需要新建UIViewController類別?UIViewController+Adapter
UIViewController+Adapter.h
@interfaceUIViewController (Adapter)
- (instancetype_Nullable)initWithAdapterNibName:(nullableNSString*)nibNameOrNil bundle:(nullableNSBundle*)nibBundleOrNil;
@end
UIViewController+Adapter.m
@implementationUIViewController (Adapter)
- (instancetype)initWithAdapterNibName:(nullableNSString*)nibNameOrNil bundle:(nullableNSBundle*)nibBundleOrNil
{
UIViewController*tmpVC;
if((UI_USER_INTERFACE_IDIOM()==UIUserInterfaceIdiomPad)) {
NSString*ipad = [nibNameOrNilstringByAppendingString:@"_ipad"];
tmpVC = [selfinitWithNibName:ipadbundle:nibBundleOrNil];
}
else
{
tmpVC = [selfinitWithNibName:nibNameOrNilbundle:nibBundleOrNil];;
}
returntmpVC;
}
@end
最后針對ipad和iPhone圖片的兼容:
使用Assets.xcassets選擇圖片后->Devices中選擇iPhone和iPad