多设备适配

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

相关文章
相关标签/搜索