[TIL] AutoLayout ๊นŠ๊ฒŒ ํŒŒ๊ธฐ ๐Ÿ”Ž

7๊ณผ11์‚ฌ์ดยท2023๋…„ 9์›” 18์ผ
0
post-thumbnail

ํŒ€ ํ”„๋กœ์ ํŠธ์™€ ๊ฐœ์ธ ํ”„๋กœ์ ํŠธ๋ฅผ ํ•˜๋ฉฐ ๋งˆ์Œ์— ๊ฑธ๋ ธ๋˜ ๊ธฐ๋Šฅ์ด ์žˆ์—ˆ๋‹ค.
AutoLayout์— ๋Œ€ํ•ด ์ดํ•ดํ•ด๋ณด๊ณ  ์‹ถ์€ ๋งˆ์Œ์ด ์ปค์กŒ๋Š”๋ฐ,
๋„๋Œ€์ฒด ์–ด๋–ค ์›๋ฆฌ๋กœ AutoLayout์ด ์ž‘๋™ํ•˜๋Š” ๊ฑธ๊นŒ?
๋”๋ถˆ์–ด SnapKit๋ฅผ ๋ชจ๋‘ ๊ถŒํ•˜๋Š”๋ฐ, ๋‹จ์ง€ ํŽธ์˜์„ฑ ๋•Œ๋ฌธ์— ์‚ฌ์šฉ์„ ํ•˜๊ธฐ์—๋Š” ๋ญ”๊ฐ€ ์•„์‰ฌ์› ๋‹ค.
๊ทธ๋ž˜์„œ AutoLayout์„ ์กฐ๊ธˆ์”ฉ ํŒŒ๊ธฐ ์‹œ์ž‘ํ–ˆ๋‹ค!


AutoLayout

์˜คํ†  ๋ ˆ์ด์•„์›ƒ์€ ๋ทฐ ๊ณ„์ธต์— ์กด์žฌํ•˜๋Š” ๋ทฐ์˜ ์‚ฌ์ด์ฆˆ์™€ ์œ„์น˜๋ฅผ ๋™์ ์œผ๋กœ ๊ณ„์‚ฐ/์กฐ์ ˆํ•˜๋Š” ๊ธฐ๋Šฅ! [๋งํฌ]
๋” ์‰ฝ๊ฒŒ ๋งํ•˜๋ฉด, ์˜คํ†  ๋ ˆ์ด์•„์›ƒ ๋•๋ถ„์— ํ™”๋ฉด์˜ UI๊ฐ€ ์•Œ์•„์„œ ์กฐ์ ˆ์ด ๋˜๋‹ค๊ณ  ์ดํ•ดํ•˜๋ฉด ๋˜๊ฒ ๋‹ค.
์˜คํ†  ๋ ˆ์ด์•„์›ƒ์„ ํฌํ•จํ•ด UI๋ฅผ ๊ทธ๋ฆฌ๋Š” ๋ฐฉ๋ฒ•์€ 3๊ฐ€์ง€๋ผ ์ฐพ์•˜๋Š”๋ฐ, ํ•˜๋‚˜์”ฉ ์ •๋ฆฌํ•ด ๋ณด๊ณ ์ž ํ•œ๋‹ค.

A. FrameBased Layout

๋‹จ์ผ ๊ธฐ์ข… ์‚ฌ์ด์ฆˆ๋ฅผ ํ™œ์šฉํ•ด์„œ UI์˜ ์œ„์น˜๋ฅผ ์žก๋Š” ๋ฐฉ๋ฒ•
์œ„ ์ด๋ฏธ์ง€์—์„œ ๋ณผ ์ˆ˜ ์žˆ๋“ฏ, UIComponent์˜ frame์— ๊ฐ’์„ ์ฃผ๋Š” ๋ฐฉ์‹์ด๋‹ค!
UIComponent๋ณ„๋กœ frame ๊ฐ’์„ ์ œ๊ณตํ•˜์—ฌ ํŠน์ • ์œ„์น˜์— ๋ฐฐ์น˜ ๋  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ํ˜•์‹์ธ ์…ˆ

  • Pros
    1. ๊ฐ’์„ ๋ช…ํ™•ํ•˜๊ฒŒ ์ œ๊ณตํ•ด์•ผ ํ•˜๊ธฐ์— ๊ธฐ์ข…์— ๋งž๋Š” UI๋ฅผ ์™„๋ฒฝํ•˜๊ฒŒ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

  • Cons
    1. ๋‹ค๊ธฐ์ข… ์Šคํฌ๋ฆฐ์„ ์ง€์›ํ•˜์ง€ ์•Š์Œ
    2. orientation์ด ๋ฐ”๋€Œ๋ฉด view์˜ ํฌ๊ธฐ๊ฐ€ ์กฐ์ ˆ๋˜์ง€ ์•Š์Œ
    3. ๋ฌด์—‡๋ณด๋‹ค ์—„์ฒญ ๊ท€์ฐฎ๊ฒ ๋‹ค !

์œ„์ฒ˜๋Ÿผ ์ผ์ผํžˆ ๋ชจ๋“  View์˜ ๊ฐ’์„ ์ง€์ •ํ•ด์ค˜์•ผ ํ•˜๋‹ค๋ณด๋‹ˆ ๋ฌธ์ œ๊ฐ€ ๋งŽ์ด ๋ฐœ์ƒํ–ˆ๋‹ค๊ณ  ํ•œ๋‹ค.
๋งŒ์ผ ๋ฐ์ดํ„ฐ์˜ ๋ณ€ํ™”(๊ธธ์ด ๋“ฑ)๋‚˜ ๊ธฐํƒ€ ์ธํ„ฐํŽ˜์ด์Šค์— ๋ณ€ํ™”๊ฐ€ ์ƒ๊ธฐ๋ฉด ๋ชจ๋“  View์˜ frame ๊ฐ’์„ ์žฌ๊ณ„์‚ฐํ•ด์•ผํ•œ๋‹ค.

๊ฐœ๋ฐœ์ž์˜ ์˜๋„๋Œ€๋กœ ๋ชจ๋“  view์˜ ์œ„์น˜๋ฅผ ์žก์„ ์ˆ˜ ์žˆ์–ด ์—ฌ๋Ÿฌ๋ชจ๋กœ ์œ ์—ฐํ•˜๋‹ค๊ณ  ๋ณผ ์ˆ˜ ์žˆ์œผ๋‚˜,
์‹ค์ œ ์‚ฌ์šฉํ•  ๋•Œ๋Š” ํ…Œ์ŠคํŠธ ๊ธฐ๊ฐ„์„ ์ •๋ง ์˜ค๋ž˜ ๋‘๊ณ  ๋ด์•ผํ•˜๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค.

๋”ฐ๋ผ์„œ ์ด๋ฅผ ๊ฐœ์„ ํ•˜๊ณ ์ž autoresizingMask๋ผ๋Š”๊ฒŒ ์‚ฌ์šฉ๋˜์—ˆ๋‹ค๊ณ  ํ•œ๋‹ค!

AutoResizingMask๋Š” view์˜ frame์ด superView frame์— ๋”ฐ๋ผ ํ•จ๊ป˜ ๋ณ€๊ฒฝ๋˜๋Š” ๊ตฌ์กฐ.
์˜ˆ๋ฅผ ๋“ค์–ด ํ•ธ๋“œํฐ์˜ ๋ฐฉํ–ฅ์ด portrait, landscape์œผ๋กœ ๋ฐ”๋€Œ์—ˆ์„ ๋•Œ view์˜ frame์ด ๋งž์ถฐ ๋ณ€๊ฒฝ๋˜๋Š” ํ˜•์‹!
๋‹จ, ํœด๋Œ€ํฐ์˜ ์›€์ง์ž„, ์ „ํ™”๋‚˜ ์•Œ๋ฆผ์ด ์˜ค๋Š” ๋“ฑ ์™ธ๋ถ€ ์ž๊ทน์—๋งŒ ๊ฐ’์ด ๋ฐ”๋€Œ๊ณ 
์•ฑ ๋‚ด ์ฝ˜ํ…์ธ  ๊ธธ์ด์˜ ๋ณ€ํ™”, ๋™์  ์ฝ˜ํ…์ธ  ์ง€์› ๊ฐ™์€ ๋‚ด๋ถ€ ๋ณ€ํ™”์—๋Š” ์˜ํ–ฅ์ด ์—†๋‹ค๊ณ  ํ•œ๋‹ค.

์ฝ˜ํ…์ธ  ๋ณ€ํ™”์— ๋Œ€ํ•ด ์„ ํƒ์ ์œผ๋กœ (์™ธ๋ถ€๋งŒ ๐Ÿ™†๐Ÿปโ€โ™‚๏ธ, ๋‚ด๋ถ€๋Š” ๐Ÿ™…๐Ÿปโ€โ™‚๏ธ) ๋Œ€์‘ํ•˜๋Š” ๋ถ€๋ถ„์„ ๋ณด๋ฉด,
์ƒํ™ฉ์— ๋”ฐ๋ผ ๋‹ค๋ฅด๊ฒ ์œผ๋‚˜ Frame์œผ๋กœ ๊ฐ’์„ ์ง€์ •ํ•˜๋Š” ๋ฐฉ์‹์€ ๊ทธ๋‹ค์ง€ ์„ ํ˜ธ๋˜์ง€ ์•Š๊ฒ ๋‹ค๋Š” ์ƒ๊ฐ์ด ๋“ ๋‹ค.



B. Size Class

Frame Based Layout์„ ๊ฐœ์„ ํ•œ ๋ฐฉ์‹์œผ๋กœ size๋งŒ์œผ๋กœ ๊ทœ๊ฒฉ์„ ์žก๋Š” ํ˜•์‹ [์ฐธ๊ณ  ๋งํฌ]

  • ์Šคํฌ๋ฆฐ์˜ ํฌ๊ธฐ๋‚˜ ๋ฐฉํ–ฅ(orientation)์„ ์‹ ๊ฒฝ์“ฐ์ง€ ์•Š๊ณ , ์•Œ์•„์„œ size ํ•˜๋‚˜๋กœ ๋ชจ๋“  ์ปดํฌ๋„ŒํŠธ์˜ ์œ„์น˜๋ฅผ ์ •๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•!
  • compact, regular ๋ผ๋Š” ๊ฐ’์„ ํ™œ์šฉํ•ด์„œ ์Šคํฌ๋ฆฐ์˜ width์™€ height๋ฅผ ์ง€์ •.
    ์• ๋งคํ•˜์ง€๋งŒ ์–ด๋–ค ๋ฐฉํ–ฅ์ด๋˜ - ๊ธด ๋ฐฉํ–ฅ์ด regular, ์งง์€ ๋ฐฉํ–ฅ์ด compact๋ฅผ ๋‹ด๋‹น.

์œ„ ๋‚ด์šฉ๋งŒ ๋ณด๋ฉด size๋„ ์ƒ๋‹นํžˆ ์‰ฌ์›Œ๋ณด์ด์ง€๋งŒ, ์‹ค์งˆ์ ์œผ๋กœ ์‚ฌ์šฉ์ด ๋˜์ง€ ์•Š๋Š”๋‹ค๊ณ  ํ•œ๋‹ค!
Size๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ธฐ๊ธฐ๋ณ„ ๋Œ€์‘์€ ๊ฐ€๋Šฅํ•˜์ง€๋งŒ ์—ฌ์ „ํžˆ ๋ฌธ์ œ์ ์ด ์žˆ๋‹ค๊ณ  ํ•˜๋Š”๋ฐ, ํ•œ๋ฒˆ ๊นŠ๊ฒŒ ์•Œ์•„๋ด์•ผ๊ฒ ๋‹ค.


C. AutoLayout

์˜คํ†  ๋ ˆ์•„์•„์›ƒ์€ ํ”„๋ ˆ์ž„ ๋ ˆ์ด์•„์›ƒ์ฒ˜๋Ÿผ ๊ฐ’์„ ์ง€์ •ํ•˜๋Š” ํ˜•์‹์ด ์•„๋‹Œ View๋ผ๋ฆฌ์˜ ๊ด€๊ณ„
๋‹ค๋ฅธ ๋ง๋กœ '๋„ˆ์™€ ๋‚˜์˜ ๊ฑฐ๋ฆฌ๊ฐ€ ์–ผ๋งˆ๋‚˜ ๋จผ์ง€'๋ฅผ ๊ธฐ์ค€์œผ๋กœ frame์„ ์žก๋Š”๋‹ค๊ณ  ์ดํ•ดํ•˜๋ฉด ๋˜๊ฒ ๋‹ค.

  • ํ˜„์žฌ Swift์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๋ฐฉ์‹
  • ์ œ์•ฝ(constraint๊ณผ anchor)์„ ํ†ตํ•ด ๊ฐ ์ปดํฌ๋„ŒํŠธ๊ฐ„์˜ ๊ด€๊ณ„๋ฅผ ์ง€์ •ํ•˜์—ฌ ๋ฐฐ์น˜

๋‹ค์–‘ํ•œ ์ œ์•ฝ๋“ค์ด ์กด์žฌํ•˜๋Š”๋ฐ ์ž ๊น ๋ฐฐ์šด ๊ฑธ ์†Œ๊ฐœํ•˜๋ฉด -

Positioning Anchor

  • ํ”ํžˆ ์‚ฌ์šฉํ•˜๋Š” topAnchor, bottomAnchor, leadingAnchor, TrailingAnchor

Sizing Anchor

  • ๋†’์ด์™€ ๋„“์ด๋ฅผ ๋‹ด๋‹นํ•˜๋Š” width, heightAnchor๊ฐ€ ์—ฌ๊ธฐ์—.

Alignment Anchor

  • ๋ฐฐ์น˜, ์ •๋ ฌ์„ ๋‹ด๋‹นํ•˜๋Š” CenterXAnchor, CenterYAnchor์ด ํ•ด๋‹น anchor์— ํฌํ•จ๋˜์–ด ์žˆ๋‹ค.

์ด์™ธ์— baseLineAnchor ๋“ฑ ๋‹ค์–‘ํ•œ ์ œ์•ฝ๋“ค์ด ์กด์žฌํ•˜๋ฉฐ ๋‚ด๊ฐ€ ์„ค์ •ํ•˜๊ณ ์ž ํ•˜๋Š” View์™€์˜ ๊ด€๊ณ„๋ฅผ ๋งบ์–ด ๊ฐ„๊ฒฉ์„ ๋‘˜ ์ˆ˜ ์žˆ๋‹ค.

0๊ฐœ์˜ ๋Œ“๊ธ€