1.根據不一樣的設備類型設置不一樣的根控制器app
//判斷是否爲iPhone設備atom
if ([UIDevice currentDevice].userInterfaceIdiom == UIUserInterfaceIdiomPhone) { //iPhonespa
//若是爲iPhone,設置SB中的tabBarVc爲根控制器.net
//獲取sb代理
UIStoryboard *mainSB = [UIStoryboard storyboardWithName:@"Main" bundle:nil];orm
//從SB中取出tabBarVcserver
UITabBarController *tabBarVc = [mainSB instantiateViewControllerWithIdentifier:@"tabbar"];對象
//設置根控制器get
self.window.rootViewController = tabBarVc;it
}
iPad橫豎屏適配-顯示模式
1.設置splitVc的顯示模式
self.preferredDisplayMode = UISplitViewControllerDisplayModeAllVisible;
/**
* splitVc的顯示模式
UISplitViewControllerDisplayModeAutomatic, 自動,默認樣式
UISplitViewControllerDisplayModePrimaryHidden, 主視圖隱藏,橫豎屏都只顯示明細視圖,能夠經過手勢來顯隱主視圖
UISplitViewControllerDisplayModeAllVisible, 橫豎屏都顯示主視圖&明細視圖,不能夠經過手勢來顯隱主視圖
UISplitViewControllerDisplayModePrimaryOverlay, 主視圖覆蓋,橫豎屏都顯示主視圖&明細視圖,能夠經過手勢來顯隱主視圖
*/
iPad橫豎屏適配-主視圖寬度
1.設置主視圖寬度
1> 設置主視圖的寬度比例(主視圖寬度/splitVc的總體寬度) 受到最大&小值限制 很差肯定具體數值
// self.preferredPrimaryColumnWidthFraction = 0.5;
2> 設置主視圖寬度的最大值
self.maximumPrimaryColumnWidth = 60;
2.獲取設備朝向
1> 監聽設備朝向的變化的通知 UIDeviceOrientationDidChangeNotification 當設備朝向發生變化後調用響應方法
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(orientationDidChange) name:UIDeviceOrientationDidChangeNotification object:nil];
}
2> 主動獲取設備朝向
2.1> 主動獲取設備朝向 該方法有延遲,不能調用後當即獲取設備朝向
[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
2.2> 使用[UIDevice currentDevice].orientation來獲取朝向
3.根據橫豎屏狀況設置不一樣的主視圖寬度
根據橫豎屏狀況設置不一樣的主視圖寬度
if (UIDeviceOrientationIsPortrait([UIDevice currentDevice].orientation)) { //豎屏
//設置主視圖寬度的最大值
self.maximumPrimaryColumnWidth = 60;
} else { //橫屏
//設置主視圖寬度的最大值
self.maximumPrimaryColumnWidth = 200;
}
多設備旋轉適配
1.根據不一樣的設備類型設置應用不一樣的可支持朝向
//UIApplication通常處理和系統相關的工做,應用內的處理通常由其代理AppDelegate來完成
2.實現AppDelgate的協議方法,根據不一樣設備設置不一樣的支持方向
/**
* 當設置應用的可支持方向時調用
*
* @param application 應用對象
* @param window 窗口對象
*
* @return 須要設置可支持方向
*/
- (UIInterfaceOrientationMask)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window{
//根據不一樣的設備類型設置應用不一樣的可支持朝向
if (isPhone) { //iPhone
return UIInterfaceOrientationMaskPortrait;
} else { //iPad
return UIInterfaceOrientationMaskAll;
}
}
3.將設備判斷抽取成宏,添加到pch中
#define isPhone ([UIDevice currentDevice].userInterfaceIdiom == UIUserInterfaceIdiomPhone) "注意宏中牽扯運算,須要添加()"
iOS9分屏適配
1.設置容器視圖 目的是在分屏時在主視圖上顯示TabbarVc的視圖內容
1> 在SB的主視圖控制器上添加containerView
2> 連線tabBarVc 選擇embed
3> 自定義主視圖控制器,連線獲取容器視圖
4> 封裝方法來控制容器視圖的顯隱
2.判斷是否分屏
1.iPad分屏原則: 當iPad分屏時,會顯示iPhone豎屏的樣式(設置iPhone豎屏對應的SizeClass的樣式)
2.判斷是否分屏本質是判斷SplitVc的SizeClass是否爲iPhone豎屏的樣式(width compact&height regular)
3.代碼監聽SizeClass
1> UIViewController這個基類遵照監聽SizeClass的協議<UITraitEnvironment>
/**
*
@protocol UITraitEnvironment <NSObject> 監聽SizeClass狀況的
//該屬性就能夠獲取對象的SizeClass狀況
@property (nonatomic, readonly) UITraitCollection *traitCollection NS_AVAILABLE_IOS(8_0);
//當SizeClass發生變化後調用
- (void)traitCollectionDidChange:(nullable UITraitCollection *)previousTraitCollection NS_AVAILABLE_IOS(8_0);
*/
2> 實現監聽SizeClass的協議方法,在其中判斷SizeClass的狀況
3> 獲取主視圖控制器 splitVc的viewControllers屬性能夠獲取主視圖&明細視圖控制器,該屬性中最多包含兩個元素,[0]獲取主視圖控制器,[1]爲明細視圖控制器
CZMasterViewController *masterVc = self.viewControllers[0];
4> 根據分屏狀況,調用主視圖中控制容器視圖顯隱的方法
[masterVc showContainerView:showContainer];