前言
最近在做小任務的時候,有一個環節是要Auto layout,在那一瞬間,我真的不知道Auto layout是什麼東西,後來暸解了一下之後才知道,這好像是自動佈局的概念,也就是說,當螢幕變成橫放或變成其他種類的螢幕的時候,內部畫面創建的一些物件會自動的隨著使用上的改變。
Well,所以,關於這個議題,我們會來稍加描述一下。
正文

假若我們今日要來用Auto-layout來編輯整個版面,我們必須先做這件事:
theTitle.translatesAutoresizingMaskIntoConstraints = false
theTitle.translatesAutoresizingMaskIntoConstraints = True
先將translatesAutoresizingMaskIntoConstraints設定為False,這樣的用意,是讓版面的設定不依照frame的絕對位置設定,而開始採用Auto layout的相對位置設定。
在這之後,我們要先了解幾個基本的東西,我會把它一組一組的排序探索它的基本意義:
1.topAnchor、BottomAnchor
topAnchor:頂部錨點
bottomAnchor:底部錨點
2. leadingAnchor、TrailingAnchor
leading:從左到右排序
trailing:從右到左排序
3. centerXAnchor、centerYAnchor
centerXAnchor:以畫面為中心的X座標
centerYAnchor:以畫面為中心的Y座標
4. widthAchor、heightAnchor
widthAchor:寬度的錨點(這個通常要和其他實體的長度配合才會有作用)
heightAnchor:高度的錨點(內容同上括弧)
這四對的作用基本上會在Auto layout中影響了佈局排列的方式,很通常的情況下,我們會在translatesAutoresizingMaskIntoConstraints = false將元件宣告為可以被Auto layout後,開始排列佈局。
大概描述完上述的內容後,我們在很常見的情況下,會先以view.layoutMarginsGuide作為宣告我們的取值是從畫面的佈局長寬開始下手:
以ALabel、BLabel為例:
ALabel.topAnchor.constraint(equalTo: BLabel.bottomAnchor)
這句代碼的意義是:將將A標籤的頂部固定在B標籤的底部
ALabel.leadingAnchor.constraint(equalTo: view.layoutMarginsGuide.leadingAnchor, constant: 100),
這句代碼的意思則ALabel會從畫面的左側排序顯示,且會從左側開始100的距離顯示。
ALabel.leadingAnchor.constraint(equalTo: view.layoutMarginsGuide.leadingAnchor, constant: 100),
將A標籤的固定到我們佈局邊距的左前緣,且為左前緣的空間增加 100
ALabel.widthAnchor.constraint(equalTo: view.layoutMarginsGuide.widthAnchor, multiplier: 0.6, constant: -100),
使A標籤的寬度等於為佈局邊距寬度的 60%,減去 100
ALabel.topAnchor.constraint(equalTo:BLabel.bottomAnchor),
將A標籤的頂部固定到B標籤的底部
ALabel.trailingAnchor.constraint(equalTo: view.layoutMarginsGuide.trailingAnchor, constant: -100),
使ALabel貼在版面,且右邊開始排列,並減去 100開始(也就是說,從右邊起始相隔100處開始顯示)
ALabel.widthAnchor.constraint(equalTo: view.layoutMarginsGuide.widthAnchor, multiplier: 0.4, constant: -100),
使A標籤的寬度佔用畫面可用空間寬度的 40%,並減去 100
ALabel.heightAnchor.constraint(equalTo: BLabel.heightAnchor),
使A標籤與B標籤的高度(實長)相等。
以上利用上述四組稍微做一些排序的方式,應該可以讓大家稍加明白Auto layout的作用。
然後,我們在依照上面的邏輯的編輯佈局後,通常會以下面的NSLayoutConstraint.activate( )將佈局透過的個方法顯示出來:
NSLayoutConstraint.activate( )

大概這樣編輯完成,就可以讓整個自動佈局的設定被作用。
大家可以透過旋轉自己的Similator看到自己自動佈局的設定結果。
