iOS11 新特性,如何适配iOS11(二)

2017-11-07  本文已影响0人  达了个D

管理margins 和 islets

layout margins

基于约束的Autolayout,使我们方便的布局视图。Auto layout为每一个View 都定义了margin。margin是指控件显示内容的边缘与控件边缘的距离。

可以用layoutMargins或者layoutMarginsGuide属性获得view的margin,margin是视图内部的一部分。layoutMargins允许获取或者设置UIEdgeInsets结构的margin。layoutMarginsGuide则获取到只读的UILayoutGuide对象。

在iOS11新增了一个属性:directional layout margins,该属性是NSDirectionalEdgeInsets结构题类型的属性:

typedef  struct   NSDirectionalEdgeInsets{

CGFloat top,leading,bottom,trailing;

}NSDirectionalEdgeInsetsAPI_AVAILABLE(ios(11.0),tvos(11.0),watchos(4.0));

layoutMargins是UIEdgeInsets结构体类型的属性:

typedef  struct  UIEdgeInsets{ 

CGFloat   top, left, bottom, right;

}UIEdgeInsets;

从定义来看,NSDirectionalEdgeInsets用leading 和 trailing 代替了left和right。

安全区域(Safe Area)


在iOS11 中topLayoutGuide和bottomLayoutguide被废除了,取而代之的就是safeArea的概念,safeArea好似描述你的视图不被任何内容遮挡的方法。它提供两种方式:safeAreaInsets或safeAreaLayoutGuide来提供给你safeArea的参照值,即 insets 或者 layout guide。 safeArea区域如图所示:


如果有一个自定义的viewController,你可能要添加你自己的bars,增加safeAreaInsets的值,可以通过一个新的属性:addtionalSafeAreaInsets来改变safeAreaInsets的值,当你的viewController改变了它的safeAreaInsets值时,有两种方式获取到回调:

UIView.safeAreaInsetsDidChange()UIViewController.viewSafeAreaInsetsDidChange()

上一篇下一篇

猜你喜欢

热点阅读