Auto Layout์ ์ฌ์ฉ์ ์ธํฐํ์ด์ค ์์๋ค์ ํฌ๊ธฐ์ ์์น๋ฅผ ์กฐ์ ํ๋๋ฐ ์ฌ์ฉ๋๋ ๋ฉ์ปค๋์ฆ์ด๋ค.
Apple ์ ํ๋ค๋ง ๋ด๋, ์์ดํฐ๋ ๊ธฐ์ข ๋ณ๋ก ๋ค์ํ ํ๋ฉด์ ํฌ๊ธฐ๊ฐ ์๋ค. ์์ดํจ๋๋ ๋ง์ฐฌ๊ฐ์ง์ด๋ค.
์ด๋ฐ ๊ฒฝ์ฐ์ Auto Layout์ ํตํด ๋ค์ํ ๋๋ฐ์ด์ค ๋ฐ ํ๋ฉด ํฌ๊ธฐ์์ ์ผ๊ด๋ ๋ ์ด์์์ ์ ์งํ ์ ์๋ค.
์ค์ํํธ์์ Auto Layout์ ๋ค๋ฃฐ ๋ Constraint์ ์ฐ์ ์์(Priority)๋
ํด๋น ์ ์ฝ์กฐ๊ฑด์ด ๋ค๋ฅธ ์ ์ฝ์กฐ๊ฑด๊ณผ ์ด๋ค ์์๋ก ์ ์ฉ๋์ด์ผ ํ๋์ง๋ฅผ ์ง์ ํ๋ ์ญํ ์ ํ๋ค.
์ฐ์ ์์๋ ์ ์ฝ์กฐ๊ฑด๋ค ์ฌ์ด์ ์ถฉ๋์ ํด๊ฒฐํ๊ณ ์ํ๋ ๋ ์ด์์์ ๊ตฌ์ฑํ๋ ๋ฐ ๋์์ ์ค๋ค.
์๋ฅผ ๋ค์ด, ์ฌ๋ฌ ์ ์ฝ์กฐ๊ฑด์ด ์๋ก ์ถฉ๋ํ๋ ๊ฒฝ์ฐ์ ์ฐ์ ์์๋ฅผ ์ฌ์ฉํ์ฌ
์ด๋ค ์ ์ฝ์กฐ๊ฑด์ ๋ ์ค์ํ๊ฒ ์ฌ๊ธธ ์ง ๊ฒฐ์ ํ ์ ์๋ค.
๋ ๋ฎ์ ์ฐ์ ์์๋ฅผ ๊ฐ์ง ์ ์ฝ์กฐ๊ฑด์ ๋จผ์ ๋ฌด์๋๊ฑฐ๋ ๋ถ๋ถ์ ์ผ๋ก ์ ์ฉ๋ ์ ์๋ค.
์ํฉ ๋ณ ์ฐ์ ์์(priority) ์ฌ์ฉ
1. ํ๋ฉด ํฌ๊ธฐ ๋ณ๊ฒฝ
ํ๋ฉด ํฌ๊ธฐ๊ฐ ์์์ง๋ ๊ฒฝ์ฐ, ๋ ์ค์ํ ์์์ ํฌ๊ธฐ๋ ๊ฐ๊ฒฉ์ ์ค์ด๊ณ
๋ ์ค์ํ ์์๋ ์ ์งํ๋ ๋ฑ์ ์ฐ์ ์์๋ฅผ ์กฐ์ ํ์ฌ ์์ ๋ณ๋ก ์ ์ ํ ๋ ์ด์์์ ์ ์งํ ์ ์๋ค.
๋ง์ฝ Horizontal StackView ์์ Label๊ณผ imageView๊ฐ ์์ ๋,
label์ ๊ธธ์ด๊ฐ ์งง๊ณ imageView๋ ํฌ๊ธฐ๊ฐ ํฐ ๊ฒฝ์ฐ๊ฐ ์์ ์ ์๋ค.
์ด ๋ ๋ ์ค์ํ ๊ฒ์ imageView์ ํฌ๊ธฐ๋ฅผ ์ ์งํ๋ ๊ฒ์ด๋ค.
๊ทธ๋ฌ๋ฏ๋ก imageView์ ๊ฐ๋ก ํญ ์ ์ฝ์ ๋ ๋์ ์ฐ์ ์์๋ฅผ ์ค์
ํ๋ฉด ํฌ๊ธฐ๊ฐ ์์์ง๋๋ผ๋ imageView์ ํฌ๊ธฐ๋ ์์์ง์ง ์๋๋ก ํ ์ ์๋ค.
2. ๋๋ฐ์ด์ค ํ์
์ฐ๋ฆฌ๋ ๋ณดํต ์์์ ์์ฒญํ๊ฑฐ๋ ํธ๋ํฐ์ผ๋ก ๋ฌธ์๋ฅผ ๋ณผ ๋ ๋๋ฐ์ด์ค์ ๋ฐฉํฅ์ ๋ณ๊ฒฝ์ํจ๋ค.
์ด๋ฐ ๊ฒฝ์ฐ์ ํ๋ฉด์ ๋ ์ด์์์ด ์ด๋ป๊ฒ ์กฐ์ ๋์ด์ผ ํ ์ง๋ฅผ Priority๋ฅผ ํตํด ์ ์ดํ ์ ์๋ค.
textField๊ฐ ํ๋ฉด์ ๊ฐ์ด๋ฐ์ ์์นํ๋๋ก ํ๋ ์ ์ฝ๊ณผ
๋๋ฐ์ด์ค์ ๋ฐฉํฅ์ด ๋ฐ๋ ๋ ํ๋ฉด ํ๋จ์ ์์นํ๋๋ก ํ๋ ์ ์ฝ์ด ์ถฉ๋ํ ์ ์๋ค.
์ด๋ฐ ๊ฒฝ์ฐ์ ํ์ ์ ๋ฐ๋ผ ๋ ์ค์ํ ์ ์ฝ ์กฐ๊ฑด์ ์ค์ ํ์ฌ ํ๋ฉด์ ์ํ๋ ์์ญ์ ๋ ๋ง์ ์ฐ์ ์์๋ฅผ ๋ถ์ฌํ ์ ์๋ค.
3. ๋ค์ํ ์ปจํ ์ธ ์ ๊ธธ์ด
๋ค์ํ ๊ธธ์ด์ ํ ์คํธ๋ ์ด๋ฏธ์ง๋ฅผ ๋ค๋ฃฐ ๋, ์ฐ์ ์์๋ฅผ ์ฌ์ฉํ์ฌ
ํ ์คํธ๋ ์ด๋ฏธ์ง์ ํฌ๊ธฐ๊ฐ ๋๋ฌด ์์์ง์ง ์๋๋ก ์กฐ์ ํ ์ ์๋ค.
textLabel ๋ด์ฉ์ ๊ธธ์ด๊ฐ ๋ณ๊ฒฝ๋๊ฑฐ๋ ๋ค๋ฅธ ์ธ์ด๋ก ํ์๋ ๋, ๋ ์ด์์์ด ๊นจ์ง ์ ์๋ค.
ํนํ ๋ค๊ตญ์ด ์ง์ ์, textLabel์ ํญ์ด ์ถฉ๋ถํ์ง ์์ ํ ์คํธ๊ฐ ์งค๋ฆฌ๋ ๊ฒฝ์ฐ๊ฐ ์๋ค.
์ด๋ฐ ์ํฉ์์๋ textLabel์ ํญ์ ์ถฉ๋ถํ ํ๋ณดํ๋๋ก ๋ ์ด์์์ ์กฐ์ ํ๊ณ
๋ ์ค์ํ ๋ ์ด์์ ์์์ ๋์ ์ฐ์ ์์๋ฅผ ๋ถ์ฌํ์ฌ ํด๊ฒฐํ ์ ์๋ค.
Code๋ก ๋ณด๊ธฐ
์ํ์ผ๋ก ๋๊ฐ์ View๋ฅผ ๊ฐ์ง๊ณ ์๋ ์ํฉ์์ ํ๋์ View๋ ํ๋ฉด ํฌ๊ธฐ๊ฐ ์ค์ด๋ค๋๋ผ๋ ํฌ๊ธฐ๋ฅผ ์ ์งํ๊ณ ์ ํ ๋
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let firstView = UIView()
firstView.backgroundColor = .black
firstView.translatesAutoresizingMaskIntoConstraints = false
view.addSubview(firstView)
let secondView = UIView()
secondView.backgroundColor = .blue
secondView.translatesAutoresizingMaskIntoConstraints = false
view.addSubview(secondView)
// firstView์ ํญ์ secondView์ ํญ๊ณผ ๊ฐ๊ฒ ์ค์
let constraint1 = firstView.widthAnchor.constraint(equalTo: secondView.widthAnchor)
// ์ฐ์ ์์ ์ค์
constraint1.priority = .defaultHigh
constraint1.isActive = true
// firstView์ ๋์ด ์ ์ฝ
let constraint2 = firstView.heightAnchor.constraint(equalToConstant: 100)
constraint2.isActive = true
// secondView์ ์์น ์ ์ฝ
let constraint3 = secondView.topAnchor.constraint(equalTo: view.topAnchor, constant: 50)
let constraint4 = secondView.centerXAnchor.constraint(equalTo: view.centerXAnchor)
constraint3.isActive = true
constraint4.isActive = true
}
}
constraint1์ firstView์ ํญ์ secondView์ ํญ๊ณผ ๊ฐ๊ฒ ์ค์ ํ๊ณ ์๋ค.
๊ทธ๋ฆฌ๊ณ constraint1์ ์ฐ์ ์์๋ฅผ defaultHigh๋ก ์ค์ ํ์ฌ, ํ๋ฉด ํฌ๊ธฐ๊ฐ ์ค์ด๋ค ๋๋ firstView์ ํญ์ด ์ ์ง๋๋๋ก ํ๋ค.
์ด๋ ๊ฒ ํ๋ฉด ํ๋ฉด์ด ์์์ ธ๋ firstView์ ํญ์ ์ถ์๋์ง ์๋๋ค.
์ฐ์ ์์(priority) ์ค์ ์ ์ฃผ์ํ ์
1. ๋ชจํธํจ (Ambiguity) ๋ฌธ์
์ฐ์ ์์๋ฅผ ๋๋ฌด ๋ฎ๊ฒ ์ค์ ํ๋ฉด ๋ชจํธํ ๋ ์ด์์์ด ๋ฐ์ํ๊ฒ ๋๋ค.
์ฆ, ์ด๋ค View์ ํฌ๊ธฐ๋ ์์น๊ฐ ๋ชจํธํด์ ธ Auto Layout์ด ์ฌ๋ฐ๋ฅธ ๊ฒฐ์ ์ ๋ด๋ฆด ์ ์๋ ์ํฉ์ด ๋๋ค.
2. ์ํ (Cycle) ๋ฌธ์
์ ์ฝ์กฐ๊ฑด ์ฌ์ด์ ์ํ์ ์ธ ์ฐ์ ์์๊ฐ ์ค์ ๋๋ฉด
Auto Layout ์์คํ ์ด ํด๊ฒฐํ ์ ์๋ ๋ฌดํ ๋ฃจํ์ ๋น ์ง๊ฒ ๋๋ค.
์ด ๋๋ฌธ์ ์ฑ์ด ๋ฉ์ถ๊ฑฐ๋ ํฌ๋์๊ฐ ๋ฐ์ํ ์ ์๋ค.
3. ๋ถ์ผ์น ๋ฌธ์
์ฐ์ ์์๋ฅผ ์ค์ ํด๋ ๋ค๋ฅธ ์ ์ฝ์กฐ๊ฑด ์ฌ์ด์์ ์ถฉ๋์ด ์๊ธธ ์ ์๋ค.
4. ๋ณด๊ธฐ์ ๋น์ ์์ ์ธ ๋์ ๋ฌธ์
๋๋ฌด ๋ฎ์ ์ฐ์ ์์๋ฅผ ์ค์ ํ๊ฑฐ๋ ๋ชจ์๋ ์ ์ฝ์กฐ๊ฑด์ ์ถ๊ฐํ๋ฉด View๊ฐ ์์๊ณผ ๋ค๋ฅด๊ฒ ๋์ํ ์ ์๋ค.
๋ ์ด์์์ด ์์์น ๋ชปํ ๋ฐฉ์์ผ๋ก ๋ณํ ์ ์๋ค.
5. ๋ ์ด์์ ์ถฉ๋
์ฐ์ ์์๋ฅผ ์กฐ์ ํ๋ฉด์๋ ์ํ๋ ๋ ์ด์์์ ์ป์ ์ ์๋ ์ํฉ์ด ๋ฐ์ํ ์ ์๋ค.