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 ...
随机推荐
- HTML a标签文字颜色
1.css代码: a{color:#00F} a:hover{color:#f00}/* 鼠标经过悬停字体颜色 */ /* css 注释说明:以上代码为设置HTML中超链接统一字体颜色 */ .div ...
- 真实的『REM』手机屏幕适配
rem 作为一个低调的长度单位,由于手机端网页的兴起,在屏幕适配中得到重用.使用 rem 前端开发者可以很方便的在各种屏幕尺寸下,通过等比缩放的方式达到设计图要求的效果. rem 的官方定义『The ...
- 30个优秀的CSS技术和实例 By 彬Go 2008-12-04
在这里可发现很多与众不同的技术,比如:图片集.阴影效果.可扩展按钮.菜单等…这些实例都是使用纯CSS和HTML实现的.单击每个实例的标题可以被转向到该技术实例的相关教程或说明页面(英文),单击每个实例 ...
- ifame问题
问题描述:在div中添加了点击事件,div中嵌套着一个iframe,父类的div事件全部都会被失效, 解决办法:给iFrame添加css pointer-events : none; 去掉了ifram ...
- nodejs 模板引擎ejs的简单使用(2)
test.ejs <!DOCTYPE html> <html> <head> <meta charset="utf-8"> < ...
- leetcode-159周赛-5231-删除子文件夹
题目描述: 自己的提交: class Solution: def removeSubfolders(self, folder: List[str]) -> List[str]: d = {} r ...
- 【BZOJ2938】【luoguP2444】病毒
description 二进制病毒审查委员会最近发现了如下的规律:某些确定的二进制串是病毒的代码.如果某段代码中不存在任何一段病毒代码,那么我们就称这段代码是安全的.现在委员会已经找出了所有的病毒代码 ...
- OpenGL ANYTOOL
{ https://github.com/zhmmmm/ANYTOOL-2.0.0.0.2Version }
- [转]Delphi DLL的创建、静态 以及动态调用
第一章 DLL简单介绍 由于在目前的学习工作中,需要用到DLL文件,就学习了下,在这里作个总结. 首先装简单介绍下DLL: 1,减小可执行文件的大小 DLL技术的产生有很大一部分原因是为了减小可执行 ...
- 「题解」:Kill
问题 A: Kill 时间限制: 1 Sec 内存限制: 256 MB 题面 题面谢绝公开. 题解 80%算法 赛时并没有想到正解,而是选择了另一种正确性较对的贪心验证. 对于每一个怪,我们定义它的 ...