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

相關文章
相關標籤/搜索