Top/Bottom Layout Guide、LayoutMargins、SafeArea

深刻理解代替单纯记忆html

Top/Bottom Layout Guide

  • 最开始(iOS 7)是NSLayoutConstraint表示约束,直接加到视图中生效ios

  • 后来(iOS 9),因为直接添加约束的API太冗长,因而出现了NSLayoutAnchor的一套API安全

    view1.topAnchor.constraint(equalTo: view2.centerYAnchor).isActive = true
    复制代码
  • 同时出现了Top/Bottom Layout Guide,为的是解决在与root view of viewcontroller布局时,躲开顶部导航栏、状态栏的问题(由于若是没有这两个guide,代码中可能会出现一些magic number)bash

  • topLayoutGuide是UILayoutSupportprotocol类型app

    • 该类型提供了length用于framebu'just
    • 也提供了topAnchorbottomAnchorlength用于autolayout布局

Auto Layout Guideiview

iOS 11及以后便deprecated了,取而代之的是更好用的safeAreaide

LayoutMargins

一种在view、subviews之间起做用的相对布局机制;能够看做是不建议subview布局的区域布局

  • 每一个view都有layoutMarginslayoutMarginsGuide两个属性(对应frame和autolayout两种布局方式)
  • 该属性告诉subViews,我建议大家布局时不要遮盖到layoutMargins表示的范围
  • 那么根据上面的思想
    • 在使用layoutMarginsGuide或在IB中选择相对于margin布局时,当父视图的layoutMargins发生改变时,子视图位置会相对改变
    • 除了上面说的联动变化,当preservesSuperviewLayoutMargins属性为true时(默认false),也会联动变化。变化是,设置该属性的view,在subview布局时,会考虑view.superView所设置的layoutMargins,好比view.superView的layoutMargins设置的很大,以致于subview可能会布局到view.superview不但愿的地方,那开启此属性就会自动调整subview位置
  • iOS 11起引入了directionalLayoutMargins,是layoutMargin的升级版,layoutMaring在水平方向只有left和right,但directionalLayoutMargins使用了leading和trailing,支持虽不一样阅读方向的语言的环境下动态配置横向margin

Positioning Content Within Layout Marginsui

safeArea

  • iOS 11引入,对每一个UIView,都有一个safeArea,它表示了可以不被其余控件遮挡的可布局的安全区域
    • UIViewController的view的safeArea会考虑到status bar、navigation bar和tab bar
  • safeArea和layoutMargin相似,一样体如今autolayout和非autolayout两方面
    • safeAreaLayoutGuide用于autolayout
    • safeAreaInsets用于frame布局
  • safeArea的这两个属性是没法修改的
    • 但UIViewController的view能够经过设置additionalSafeAreaInsets来扩展safearea

Positioning Content Relative to the Safe Areaspa

safeArea vs layoutMargin

截止到目前(写文章时最新的iOS系统是13版本)

  • safearea的产生并非用来取代layoutMargin的,从layoutMargin并无被废弃可以看出,这两套机制均可以正常的work

  • layoutMargin能够被修改,safeArea不能够

  • 二者的惟一联系是,insetsLayoutMarginsFromSafeArea当为true时,且layoutMargin在safearea范围之外时,layoutMargin会自动调整为safeArea的大小

  • Layout Guide, Margins, Insets and Safe Area demystified on iOS 10 & 11

相关文章
相关标签/搜索