博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
多设备适配
阅读量:7105 次
发布时间:2019-06-28

本文共 3236 字,大约阅读时间需要 10 分钟。

hot3.png

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的协议方法,根据不同设备设置不同的支持方向

/**

 *  当设置应用的可支持方向时调用

 *

 *  application 应用对象

 *  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

你可能感兴趣的文章
日志分析(六)压测数据
查看>>
删除该目录下所有文件和子文件夹,但该根文件夹会保留
查看>>
织梦如何与discuz论坛整合一起应用
查看>>
Linux脚本实现远程自动备份
查看>>
dedecms基础语法
查看>>
HTML4.01规范中英文对照-有关SGML和HTML的一些事(2)
查看>>
nodejs-koa 中文档
查看>>
rhel5.6下安装oracle 11g
查看>>
saltstack自动部署apache实例
查看>>
电信技术培训AAA介绍
查看>>
docker_基础_2
查看>>
Zabbix系统数据采集方法总结
查看>>
手工编译LAMP
查看>>
HTML --段落
查看>>
广义表
查看>>
输出一个整数的每一位
查看>>
学习Spark的入门教程——《Spark核心源码分析与开发实战》
查看>>
MYSQL函数
查看>>
CentOS7.4安装部署KVM虚拟机
查看>>
2015年度总结
查看>>