管理margins 和 islets
layout margins
基于約束的Autolayout,使我們方便的布局視圖闸氮。Auto layout為每一個View 都定義了margin祖搓。margin是指控件顯示內(nèi)容的邊緣與控件邊緣的距離。
可以用layoutMargins或者layoutMarginsGuide屬性獲得view的margin,margin是視圖內(nèi)部的一部分湖苞。layoutMargins允許獲取或者設(shè)置UIEdgeInsets結(jié)構(gòu)的margin拯欧。layoutMarginsGuide則獲取到只讀的UILayoutGuide對象。
在iOS11新增了一個屬性:directional layout margins,該屬性是NSDirectionalEdgeInsets結(jié)構(gòu)題類型的屬性:
typedef ?struct ? NSDirectionalEdgeInsets{
CGFloat top,leading,bottom,trailing;
}NSDirectionalEdgeInsetsAPI_AVAILABLE(ios(11.0),tvos(11.0),watchos(4.0));
layoutMargins是UIEdgeInsets結(jié)構(gòu)體類型的屬性:
typedef ?struct ?UIEdgeInsets{?
CGFloat ? top, left, bottom, right;
}UIEdgeInsets;
從定義來看财骨,NSDirectionalEdgeInsets用leading 和 trailing 代替了left和right镐作。
安全區(qū)域(Safe Area)
在iOS11 中topLayoutGuide和bottomLayoutguide被廢除了,取而代之的就是safeArea的概念隆箩,safeArea好似描述你的視圖不被任何內(nèi)容遮擋的方法该贾。它提供兩種方式:safeAreaInsets或safeAreaLayoutGuide來提供給你safeArea的參照值,即 insets 或者 layout guide捌臊。 safeArea區(qū)域如圖所示:
如果有一個自定義的viewController杨蛋,你可能要添加你自己的bars,增加safeAreaInsets的值理澎,可以通過一個新的屬性:addtionalSafeAreaInsets來改變safeAreaInsets的值逞力,當你的viewController改變了它的safeAreaInsets值時,有兩種方式獲取到回調(diào):
UIView.safeAreaInsetsDidChange()UIViewController.viewSafeAreaInsetsDidChange()