Swift on Xcode#8[自動佈局Auto layout]

影山小麥機
Jul 19, 2021

前言

最近在做小任務的時候,有一個環節是要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看到自己自動佈局的設定結果。

可見右上角的旋轉,讓自己編輯的佈局在操作後知道自己編輯的好不好

Sign up to discover human stories that deepen your understanding of the world.

Free

Distraction-free reading. No ads.

Organize your knowledge with lists and highlights.

Tell your story. Find your audience.

Membership

Read member-only stories

Support writers you read most

Earn money for your writing

Listen to audio narrations

Read offline with the Medium app

影山小麥機
影山小麥機

Written by 影山小麥機

本職為Mobile工程師,熱愛分享視野,也樂意站在ChatGPT的肩膀上。訂閱小麥機,收割技術、職涯、人生的難題。

No responses yet

Write a response