多设备适配

1.根据不同的设备类型设置不同的根控制器


//判断是否为iPhone设备

if ([UIDevice currentDevice].userInterfaceIdiom == UIUserInterfaceIdiomPhone) { //iPhone

    //如果为iPhone,设置SB中的tabBarVc为根控制器

    //获取sb

    UIStoryboard *mainSB = [UIStoryboard storyboardWithName:@"Main" bundle:nil];

    //SB中取出tabBarVc

    UITabBarController *tabBarVc = [mainSB instantiateViewControllerWithIdentifier:@"tabbar"];

    //设置根控制器

    self.window.rootViewController = tabBarVc;

}


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





转载于:https://my.oschina.net/u/2618362/blog/662044

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值