iOS开发系列-iOS适配
概述
发布iPhone X 系统版本为iOS11, 由于刘海屏原因需要对新的机型做适配。
iPhone X
safeArea
iOS11苹果提出safeArea替代iOS7引入 topLayoutGuide 和 bottomLayoutGuide
对于safeArea体现 iOS11增加了新的API
UIView
UIViewController
safeAreaLayoutGuide
UILayoutGuide *safeAreaLayoutGuide父类NSobject,在API看到内部有两个属性,官方文档描述
@property(nonatomic,readonly) CGRect layoutFrame;
@property(nonatomic,weak,nullable) UIView *owningView;
layoutFrame是相对所属UIView的坐标的一块区域。获取最好的时机是在所属UIView的-layoutSubviews方法中
说白了就是View的safeAreaLayoutGuide属性中的layoutFrame属性就是在以当前View的坐标系系统计算得到安全区域,在布局子控件是以这块安全区域为参照布局。避免子控件不能够完全显示的问题。
对于如果使用AutoLayout布局可以这样写:
对于使用Masonry框架布局
可见API添加的UIView的safeAreaLayoutGuide属性用于自动布局参照, 保证所在子控件能够完全显示在父视图中。
safeAreaInsets
UIView的属性safeAreaLayoutGuide中的layouFrame可以认为是根据UIView的safeAreaInsets计算出来的,它表示UIView的安全区域相对当前View的内边距。
与safeAreaLayoutGuide一样获取最好的在UIView的-layoutSubviews方法中
对于控制器和UIView API分别提供了不同的回调方法监听View的safeAreaLayoutGuide改变
适配宏定义
/** 当前系统版本判断 */
#define iOS(version) ([UIDevice currentDevice].systemVersion.doubleValue >= (version)) #define CHScreenW [UIScreen mainScreen].bounds.size.width
#define CHScreenH [UIScreen mainScreen].bounds.size.height // 判断是否是刘海屏幕
#define IS_LIUHAI_DEVIVE \
({\
BOOL INTERFACE_IS_IPHONEX = NO;\
if (@available(iOS 11.0, *)) {\
if([[UIApplication sharedApplication] delegate].window.safeAreaInsets.bottom > 0.0) {\
INTERFACE_IS_IPHONEX = YES;\
}\
}\
INTERFACE_IS_IPHONEX;\
}) // 底部安全区的高度
#define HT_TabbarSafeBottomMargin (IS_LIUHAI_DEVIVE ? 34.f : 0.f)// Status bar & navigation bar height.
// 状态栏高度
#define HT_StatusBarHeight (IS_LIUHAI_DEVIVE ? 44.f : 20.f)
// 导航栏高度
#define HT_NavigationBarHeight 44.f
// TabBar高度
#define HT_TabbarHeight (IS_LIUHAI_DEVIVE ? (49.f+HT_TabbarSafeBottomMargin) : 49.f)
// 导航栏&状态栏
#define HT_StatusBarAndNavigationBarHeight (HT_StatusBarHeight + HT_NavigationBarHeight)
iOS开发系列-iOS适配的更多相关文章
- iOS开发系列--IOS程序开发概览
概览 终于到了真正接触IOS应用程序的时刻了,之前我们花了很多时间去讨论C语言.ObjC等知识,对于很多朋友而言开发IOS第一天就想直接看到成果,看到可以运行的IOS程序.但是这里我想强调一下,前面的 ...
- iOS开发系列-iOS签名机制
概述 想要了解iOS的签名机制需要有一定密码学有一定的了解.下面依次介绍的数据的加密解密.单向散列函数.数字签名.证书.iOS签名机制. 数据加密解密 在网络通信中想要防止数据被攻击者拦截,我们通常对 ...
- iOS开发系列-iOS布局相关
LayoutSubViews 需要在某个View调整子视图的位置时,可以重写. 以下情况会出发LayoutSubViews方法的调用 init初始化不会触发layoutSubviews,但是是用ini ...
- iOS开发系列文章(持续更新……)
iOS开发系列的文章,内容循序渐进,包含C语言.ObjC.iOS开发以及日后要写的游戏开发和Swift编程几部分内容.文章会持续更新,希望大家多多关注,如果文章对你有帮助请点赞支持,多谢! 为了方便大 ...
- iOS开发系列--让你的应用“动”起来
--iOS核心动画 概览 在iOS中随处都可以看到绚丽的动画效果,实现这些动画的过程并不复杂,今天将带大家一窥iOS动画全貌.在这里你可以看到iOS中如何使用图层精简非交互式绘图,如何通过核心动画创建 ...
- iOS开发系列--并行开发其实很容易
--多线程开发 概览 大家都知道,在开发过程中应该尽可能减少用户等待时间,让程序尽可能快的完成运算.可是无论是哪种语言开发的程序最终往往转换成汇编语言进而解释成机器码来执行.但是机器码是按顺序执行的, ...
- iOS开发系列--让你的应用“动”起来
--iOS核心动画 概览 在iOS中随处都可以看到绚丽的动画效果,实现这些动画的过程并不复杂,今天将带大家一窥iOS动画全貌.在这里你可以看到iOS中如何使用图层精简非交互式绘图,如何通过核心动画创建 ...
- IOS开发系列 --- 核心动画
原始地址:http://www.cnblogs.com/kenshincui/p/3972100.html 概览 在iOS中随处都可以看到绚丽的动画效果,实现这些动画的过程并不复杂,今天将带大家一窥i ...
- iOS开发系列--让你的应用“动”起来【转载】
概览 原文链接:http://www.cnblogs.com/kenshincui/p/3972100.html 在iOS中随处都可以看到绚丽的动画效果,实现这些动画的过程并不复杂,今天将带大家一窥i ...
随机推荐
- TLS/SSL 协议 - ServerKeyExchange、ServerHelloDone
ServerKeyExchange ServerKeyExchange消息的目的是携带密钥交换的额外数据.消息内容对于不同的协商算法套件都会存在差异.在某些场景中,服务器不需要发送任何内容,这意味着在 ...
- mysql优化1:建表原则
建表三大原则: 定长和变长分离 常用字段和不常用字段分离 使用冗余字段或冗余表 1.定长与变长分离 如 id int,占4个字节,char(4)占4个字符长度,也是定长,time 即每一个单元值占的字 ...
- springMvc请求路径解析
一开始我的代码是: //index.jsp<%@ page contentType="text/html;charset=UTF-8" language="java ...
- C# 设计模式 (一)
学习来自<大话设计模式>有兴趣可以研究一下 一.简单工厂模式 原理 子类对象可以赋值给父类对象.同一个父类对象的子类,通过switch语句new出来(当然用if也可以但那样判断就多了起来) ...
- .net 委托 +lamda表达式
1.委托与类同级 想当于定义了一个类型 如 delegate int Sum(int a, int b);// 在声明类之前声明 2.这里可以在类里写个函数 public int sumAB(int ...
- true - (成功的)什么都不做
总览 (SYNOPSIS) true [忽略命令行参数] true OPTION 描述 (DESCRIPTION) 程序 结束 时, 产生 表示 成功 的 状态码. 下列的 选项 没有 简写 形式. ...
- 使用自己的Python函数处理Protobuf中的字符串编码
我目前所在的项目是一个老项目,里面的字符串编码有点乱,数据库中有些是GB2312,有些是UTF8:代码中有些是GBK,有些是UTF8,代码中转来转去,经常是不太清楚当前这个字符串是什么编码,由于是老项 ...
- Vue Router基础
路由 安装 vue-router 起步 <router-link to="/foo">Go to Foo</router-link> <router- ...
- Kotlin Hello World
{ https://github.com/zhmmmm/Kotlin }
- thinkphp 快速缓存
如果你的存储数据没有有效期的需求,那么系统还提供了一个快速缓存方法F可以用来更快的操作. 大理石平台厂家 F方法可以支持不同的存储类型,如果是文件类型的话,默认保存在DATA_PATH目录下面. 快速 ...