多設備適配

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.判斷是否分屏本質是判斷SplitVcSizeClass是否爲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> 獲取主視圖控制器 splitVcviewControllers屬性能夠獲取主視圖&明細視圖控制器,該屬性中最多包含兩個元素,[0]獲取主視圖控制器,[1]爲明細視圖控制器

CZMasterViewController *masterVc = self.viewControllers[0];


4> 根據分屏狀況,調用主視圖中控制容器視圖顯隱的方法

[masterVc showContainerView:showContainer];

相關文章
相關標籤/搜索