iOS ์•ฑ๊ฐœ๋ฐœ์—์„œ ํ™”๋ฉด์„ ๋‹ด๋‹นํ•œ๋‹ค๋ฉด ํ”ผํ•  ์ˆ˜ ์—†๋Š” autolayout! ๊ณต์‹ ๋ฌธ์„œ๋ฅผ ์ฝ์–ด๋ณด๋ฉฐ ์ •๋ฆฌํ•ด๋ณด์ž. ๊ฐ„๋žตํ•˜๊ฒŒ!

Introduction

Constraints๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ View hierarchy์— ์žˆ๋Š” ๋ชจ๋“  ๋ทฐ์˜ ํฌ๊ธฐ์™€ ์œ„์น˜๋ฅผ ๋™์ ์œผ๋กœ ๊ณ„์‚ฐํ•˜๋Š” ๋ฐฉ๋ฒ•

๋ณ€๊ฒฝ์‚ฌํ•ญ์ด ๋ฐœ์ƒํ–ˆ์„ ๋•Œ, ๋™์ ์œผ๋กœ ๋Œ€์‘์ด ๊ฐ€๋Šฅํ•˜๋‹ค. ์–ด๋–ค ๋ณ€๊ฒฝ์‚ฌํ•ญ๋“ค์ด ์žˆ์„๊นŒ?

  • ์™ธ๋ถ€
    • ์ฐฝ์˜ ํฌ๊ธฐ๋ฅผ ์กฐ์ • (OS X)
    • ๋ถ„ํ•  ๋ณด๊ธฐ (iPad)
    • ํšŒ์ „ (iOS)
    • ๋‹ค์–‘ํ•œ ํ™”๋ฉด ํฌ๊ธฐ ์ง€์›
    • ๋‹ค์–‘ํ•œ ํฌ๊ธฐ ํด๋ž˜์Šค๋ฅผ ์ง€์›
  • ๋‚ด๋ถ€
    • ํ‘œ์‹œ๋˜๋Š” ์ปจํ…์ธ ์˜ ๋ณ€ํ™”
      • ์ปจํ…์ธ  ๋ณ€ํ™”์— ๋”ฐ๋ผ ๋‹ค๋ฅธ ๋ ˆ์ด์•„์›ƒ์„ ๊ฐ€์ ธ์•ผ ํ•  ์ˆ˜ ์žˆ๋‹ค. (ํ…์ŠคํŠธ, ์ด๋ฏธ์ง€)
    • ๊ตญ์ œํ™” (๋‹ค์–‘ํ•œ ์–ธ์–ด)
      • ์–ธ์–ด๋งˆ๋‹ค ๊ฐ™์€ ๋‹จ์–ด์˜ ๊ธธ์ด๊ฐ€ ๋‹ฌ๋ผ์ง (ํ…์ŠคํŠธ์˜ ๊ณต๊ฐ„)
      • ๋ฏธ๊ตญ๊ณผ ํ•œ๊ตญ์€ ๋‚ ์งœ ๋‚˜ํƒ€๋‚ด๋Š” ์ˆœ์„œ๊ฐ€ ๋ฐ˜๋Œ€์ž„ (๋‚ ์งœ ๋ฐ ์ˆซ์ž์— ๋”ฐ๋ฅธ ๋ณ€ํ™”)
      • ์•„๋ž ์–ธ์–ด๋Š” ์˜ค๋ฅธ์ชฝ์—์„œ ์™ผ์ชฝ (๋ ˆ์ด์•„์›ƒ ๊ตฌ์„ฑ)
      • ๊ธ€๊ผด ํฌ๊ธฐ ์กฐ์ •์— ๋”ฐ๋ฅธ ๋ ˆ์ด์•„์›ƒ ๋ณ€๊ฒฝ

Autolayout vs. Frame-based Layout

Frame-based Layout

Frame-based Layout์€ ์ด์ „์— ์‚ฌ์šฉํ•˜๋˜ ๋ฐฉ์‹์ด๋‹ค. UI๋ฅผ ๋งŒ๋“ค๋ ค๋ฉด, ๋ชจ๋“  View ์— ๋Œ€ํ•œ ํฌ๊ธฐ์™€ ์œ„์น˜๋ฅผ ๊ณ„์‚ฐํ•ด์•ผ ํ–ˆ๋‹ค. ๋ทฐ ๊ณ„์ธต์ด ๋‚ด๋ ค๊ฐ์— ๋”ฐ๋ผ ํ•˜์œ„ ๋ทฐ๋Š” ์ƒ์œ„ ๋ทฐ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์œ„์น˜์™€ ํฌ๊ธฐ๋ฅผ ์žก๊ฒŒ๋˜๋Š”๋ฐ, ์ด๋ ‡๊ฒŒ ์ˆœ์ฐจ์ ์œผ๋กœ ์–ฝํ˜€์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ๋ณต์žกํ•œ ๋ทฐ๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด์„œ๋Š” ๊ต‰์žฅํžˆ ๊ท€์ฐฎ์•˜๋‹ค. ๋˜ํ•œ ๋งŒ์•ฝ์— ํ™”๋ฉด ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ๋ฐœ์ƒํ•˜๋ฉด ์ด ์ง“์„ ๋‹ค์‹œ ํ•ด์•ผํ•œ๋‹ค. ์œผ์œผ.

์ด๋Ÿฐ ์–ด๋ ค์›€์— ์žˆ์–ด์„œ autoresizing mask๋ผ๋Š” ๊ฒƒ์ด ์žˆ๋‹ค. super view์˜ ํ”„๋ ˆ์ž„์ด ๋ณ€๊ฒฝ๋  ๋•Œ, ๋‚ด ํ”„๋ ˆ์ž„์ด ์–ด๋–ป๊ฒŒ ๋ณ€๊ฒฝ๋ ์ง€ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

์Šคํ† ๋ฆฌ๋ณด๋“œ์—์„œ ๋ณด๋˜ ์ด๋…€์„์ด๋‹ค. ํ™”๋ฉด์„ ๋ณด๋ฉด ์ƒํ•˜์ขŒ์šฐ, ๋‚ด๋ถ€ ์„ธ๋กœ, ๊ฐ€๋กœ์— ํ™”์‚ดํ‘œ๊ฐ€ ์žˆ๋‹ค. ์˜ค๋ฅธ์ชฝ์—๋Š” ํ•ด๋‹น ์˜ต์…˜์„ ํด๋ฆญํ–ˆ์„ ๋•Œ, ์ƒ์œ„ ๋ทฐ์™€ ์–ด๋–ค ๊ด€๊ณ„๋ฅผ ๋งบ์–ด์„œ ๋ณด์ผ์ง€์— ๋Œ€ํ•œ ๊ฐ„๋‹จํ•œ ์• ๋‹ˆ๋งค์ด์…˜์„ ๋ณด์—ฌ์ค€๋‹ค. autolayout์„ ์„ค์ •ํ•  ๋•Œ๋Š”, ํ•ด๋‹น ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ฒ ๋‹ค๊ณ  ๋ช…์‹œ์ ์œผ๋กœ ์„ ์–ธํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค. customView.translatesAutoresizingMaskIntoConstraints = false

ํ•˜์ง€๋งŒ ์ด๋Ÿฐ autoresizing mask๋Š” ์œ„์—์„œ ์‚ดํŽด๋ณด์•˜๋˜ ๋ณ€๊ฒฝ์‚ฌํ•ญ๋“ค ์ค‘์— ๋ถ€๋ถ„์ ์œผ๋กœ๋งŒ ์ปค๋ฒ„๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค. ์ฆ‰, ์œ„์˜ ์™ธ๋ถ€, ๋‚ด๋ถ€ ๋ณ€๊ฒฝ์‚ฌํ•ญ ์ค‘์—์„œ ์™ธ๋ถ€ ๋ณ€๊ฒฝ์‚ฌํ•ญ๋งŒ ๋ฐ˜์˜ํ•  ์ˆ˜ ์žˆ๋‹ค.

์ด๋Ÿฌํ•œ ์ ‘๊ทผ ๋ฐฉ์‹์—์„œ ์กฐ๊ธˆ๋” ๋‚˜์•„๊ฐ€, ๋™์ ์œผ๋กœ ๋ ˆ์ด์•„์›ƒ์„ ๊ฐœ์„ ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ๋ฐ”๋กœ autolayout์ด๋‹ค.

Autolayout

๋ ˆ์ด์•„์›ƒ์„ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ, ๊ด€๊ณ„๋ฅผ ์„ค์ •ํ•˜๊ณ  ๋‚˜๋จธ์ง€๋Š” ๋งก๊ธฐ๋Š” ๋ฐฉ์‹์ด๋‹ค. ๊ทธ๋ฆผ์„ ์ž˜ ๋ณด๋ฉด, ์ƒํ•˜์ขŒ์šฐ, view๊ฐ„์˜ ๊ด€๊ณ„, ๋„ˆ๋น„, ๋†’์ด ๋“ฑ์— ๋Œ€ํ•ด ์ˆซ์ž๊ฐ€ ๋‹ฌ๋ ค์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค. ์ด๋Ÿฐ ๊ด€๊ณ„๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋™์ ์œผ๋กœ view ์š”์†Œ์˜ ํฌ๊ธฐ์™€ ์œ„์น˜๋ฅผ ๊ณ„์‚ฐํ•˜์—ฌ ํ™”๋ฉด์— ๋ณด์—ฌ์ฃผ๋Š” ๊ฒƒ์ด autolayout์ด๋‹ค.

Anatomy of a Constraint

์ƒ๊ฐ๋ณด๋‹ค ์‰ฝ๋‹ค. ๊ฒฐ๊ตญ ์šฐ๋ฆฌ๋Š” 2๊ฐœ์˜ view์‚ฌ์ด์˜ ๊ด€๊ณ„๋ฅผ ์ •์˜ํ•ด์ฃผ๋ฉด ๋œ๋‹ค. ์•ž์—์„œ ๋ถ€ํ„ฐ ์ฝ์–ด๋ณด๋ฉด, RedView์˜ Leading์€ BlueView์˜ trailing์— 1๋ฐฐ์ด๊ณ  ์ถ”๊ฐ€์ ์œผ๋กœ 8๋งŒํผ์˜ ์ƒ์ˆ˜๋ฅผ ๋”ํ•œ ๊ฐ’์ด๋‹ค.

left, right๊ฐ€ ์•„๋‹ˆ๊ณ  ์™œ leading, trailing์ธ๊ฐ€์š”?
๊ตญ์ ์— ๋”ฐ๋ผ left์˜ ์‚ฌํšŒ์ ์˜๋ฏธ๊ฐ€ ๋‹ฌ๋ผ์ง€๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์ฆ‰, left๋ผ๋Š” ๋‹จ์–ด์—๋Š” ์—ฌ๋Ÿฌ๊ฐ€์ง€ ์˜๋ฏธ๊ฐ€ ํ˜ผ์žฌ๋˜์žˆ์„ ์ˆ˜ ์žˆ๋‹ค. ๋ถ€์ •์  ์˜๋ฏธ (์ธ๋„), ๊ธ€์˜ ์‹œ์ž‘์  (ํ•œ๊ตญ, ๋ฏธ๊ตญ, ์ผ๋ณธ), ๊ธ€์˜ ๋์  (์•„๋ž๊ถŒ) ๋“ฑ๋“ฑ. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ์ข€๋” ๋ช…ํ™•ํ•œ ์˜๋ฏธ๋กœ leading, trailing์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

Autolayout Attributes

ํŠน์„ฑ์œผ๋กœ๋Š” ์—ฌ๋Ÿฌ๊ฐœ๊ฐ€ ์žˆ๋‹ค. ์ด๋Š” ์‹ค์ œ๋กœ ์ŠคํŽ™์„ ๋ณด๊ณ , ์œ ์—ฐํ•˜๊ฒŒ ์ ์šฉํ•˜๋Š” ๊ฒƒ์ด ํ•„์š”ํ•˜๋‹ค. ์‚ฝ์งˆ ์—ฌ๋Ÿฌ๋ฒˆ ํ•ด๋ณด๋ฉด ๊ฐ์ด ์˜จ๋‹ค.

๊ทธ๋Ÿฐ๋ฐ.. ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒƒ๋“ค์„ ์•Œ์•„๋‘ฌ์•ผ, ๋‚˜์ค‘์— ์ฐพ์•„์„œ ์ฒ˜๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•  ๊ฒƒ์ด๋‹ค.

Constraint Inequalities

์ง€๊ธˆ์€ ๊ตฌ์† ๋ฐฉ์ •์‹์ด ๋“ฑํ˜ธ์ธ ๊ฒƒ๋งŒ ์•Œ์•„๋ณด์•˜๋Š”๋ฐ, ๊ทธ๋ ‡์ง€ ์•Š์„ ์ˆ˜๋„ ์žˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด์„œ ๋‘๊ฐœ์˜ view๊ฐ€ ์žˆ๋Š”๋ฐ ์‚ฌ์šฉ์ž๊ฐ€ ํ™”๋ฉด์„ ์—„์ฒญ ์ฐŒ๊ทธ๋ คํŠธ๋ ธ๋‹ค๊ณ  ์ƒ๊ฐํ•ด๋ณด์ž.

๊ทธ๋Ÿฐ ์ƒํ™ฉ์—์„œ ๊ผญ ๋ณด์—ฌ์•ผ ํ•˜๋Š” Title์ด ์žˆ์–ด์„œ, ์ƒ๋Œ€์ ์œผ๋กœ ๋œ ์ค‘์š”ํ•œ View๊ฐ€ ์ฐŒ๊ทธ๋ŸฌํŠธ๋ ค์ง€๊ฒŒ ํ•˜๊ณ  ์‹ถ๋‹ค. ์ฆ‰, ์ œ์•ฝ ์กฐ๊ฑด์˜ ์˜ํ–ฅ๋„๋ฅผ ์กฐ์ ˆํ•˜๊ณ  ์‹ถ๋‹ค๋Š” ์–˜๊ธฐ๋‹ค.

์ด๋Ÿฐ ๊ฒฝ์šฐ ์‹œ๋„ํ•ด ๋ณผ ์ˆ˜ ์žˆ๋Š” ์˜ต์…˜์ด ๋ถ€๋“ฑ์‹์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

// A single equal relationship
Blue.leading = 1.0 * Red.trailing + 8.0
 
// Can be replaced with two inequality relationships
Blue.leading >= 1.0 * Red.trailing + 8.0
Blue.leading <= 1.0 * Red.trailing + 8.0

Constraint Priorities

๋‹ค์Œ์œผ๋กœ๋Š” ์šฐ์„ ์ˆœ์œ„๋ฅผ ์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

UILabel๊ฐ™์€ ๋…€์„์„ ์˜ฌ๋ฆฌ๊ณ  ์กฐ์‚ฌํ•ด๋ณด๋ฉด ์œ„์™€ ๊ฐ™์€ ๋…€์„์ด ๋‚˜์˜จ๋‹ค. ์šฐ์„ ์ˆœ์œ„๋ฅผ ์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋‘๊ฐœ๊ฐ€ ์žˆ๋‹ค. ํ•˜๋‚˜์”ฉ ์•Œ์•„๋ณด์ž.

Hugging priority

์ˆซ์ž๊ฐ€ ํฌ๋ฉด ๋” โ€œ์•ˆ๊ณ  ์‹ถ์–ด == ์ž‘์•„์ง€๊ณ  ์‹ถ์–ด!โ€

๋ผ๋ฒจ ๋‘๊ฐœ๋ฅผ ์˜ฌ๋ ค๋‘๊ณ  leading 20, ์‚ฌ์ด 20, trailing 20์„ ์ฃผ์—ˆ๋‹ค. ์ด๋Ÿฐ ์ƒํ™ฉ์ด๋ฉด ๋‘ label์ค‘ ํ•˜๋‚˜๋Š” width๊ฐ€ ๋Š˜์–ด๋‚˜์„œ, ์ด constraint๋ฅผ ๋งŒ์กฑ์‹œ์ผœ์ฃผ์–ด์•ผ ํ•œ๋‹ค. ์ฆ‰, ์–ด๋–ค๋†ˆ ํ•˜๋‚˜๋Š” ๋Š˜์–ด๋‚˜์•ผ ํ•œ๋‹ค! (๋นจ๊ฐ„์ƒ‰์œผ๋กœ ์ ์šฉ์•ˆ๋จ)

๋งŒ์•ฝ, ์ด๋Ÿฐ ์ƒํ™ฉ์—์„œ ์™ผ์ชฝ์ด ์ข€๋” ์•ˆ์œผ๋กœ ๋“ค์–ด๊ฐ€๋ ค๋Š” ๊ฒฝํ–ฅ์„ ๊ฐ€์ง€๊ณ  ์‹ถ๋‹ค๋ฉด ์™ผ์ชฝ label์˜ hugging priority๋ฅผ ์ฆ๊ฐ€์‹œ์ผœ์ฃผ๋ฉด ๋œ๋‹ค.

๋ฐ˜๋Œ€๋ผ๋ฉด ์˜ค๋ฅธ์ชฝ์„ ๋†’ํ˜€์ฃผ๋ฉด ๋œ๋‹ค.

Compression Resistance priority

์ˆซ์ž๊ฐ€ ํฌ๋ฉด ๋” โ€œ์ €ํ•ญํ•˜๊ณ  ์‹ถ์–ด == ๋‚  ์œ ์ง€ํ•˜๊ณ  ์‹ถ์–ด!โ€

๊ทธ๋Ÿฐ๋ฐ ์ด๊ฒŒ ๋์ด ์•„๋‹ˆ๋‹ค. ์œ„ ์ƒํ™ฉ์—์„œ content๋ฅผ ๊ฐ€๋“ ์ฑ„์›Œ๋ณด์ž.

์˜คํ†  ๋ ˆ์ด์•„์›ƒ์ด ์•ˆ๋งž๋‹ค๋ฉด์„œ ๋ญ๋ผ๋ญ๋ผ ํ•œ๋‹ค.

์ž˜ ๋ณด๋‹ˆ, ๊ฐ€๋กœ ์ถ•์˜ compression resistance๋ฅผ ์ค„์ด๋ผ๊ณ  ํ•œ๋‹ค. ๊ทธ๋Ÿผ ์ด๋…€์„์€ ๋„๋Œ€์ฒด ๋ฌด์—‡์ผ๊นŒ? ์ผ๋‹จ ์ค„์—ฌ๋ณด์ž.

์™ผ์ชฝ์˜ ์ €ํ•ญ๋„๋ฅผ 1์˜ฌ๋ ธ๋”๋‹ˆ ๋…ธ๋ž€์ƒ‰์ด ์ง‘์— ๊ฐ€๋ฒ„๋ ธ๋‹ค. ์ฆ‰, ๋” ์ปจํ…์ธ ๊ฐ€ ๋“ค์–ด์™”์„ ๋•Œ ํž˜์ด ์„ธ์ง€๊ฒŒ ๋งŒ๋“ค์–ด์ค€ ๊ฒƒ. ๋ฐ˜๋Œ€๋กœ ์˜ค๋ฅธ์ชฝ์ด๋ฅผ ๋†’ํ˜€๋ณด์ž.

์˜ค๋ฅธ์ชฝ์ด์˜ ํž˜์ด ๊ฐ•๋ ฅํ•ด์กŒ๋‹ค!

์ •๋ฆฌ

์ˆซ์ž๊ฐ€ ์ปธ์„ ๋•Œ ๊ธฐ์ค€์œผ๋กœ ์ •๋ฆฌํ–ˆ๋‹ค.

  • Hugging Priority
    • ๊ทธ๋ƒฅ ๋ ˆ์ด์•„์›ƒ์ด ์ •ํ•ด์ ธ์žˆ์„ ๋•Œ, ๋ˆ„๊ฐ€ ๋” ์ญˆ๊ตฌ๋ฆฌ์•ผ?
  • Compress Resistance priority
    • ๋‹ˆ๋„ค ์•ˆ์— ๋‚ด์šฉ์ฐจ์žˆ์œผ๋ฉด ๋ˆ„๊ตฐ๊ฐ€๋Š” ์ž‘์•„์ ธ์•ผ๋˜๋Š”๋ฐ, ๊ทธ ์ƒํ™ฉ์—์„œ์˜ ํž˜ ์Šคํ…Ÿ

์•„๋ž˜ ๋‚ด์šฉ๊นŒ์ง€ ์ดํ•ดํ•ด์•ผ ์™œ ์ด๋ ‡๊ฒŒ ๋˜๋Š”์ง€ ๋” ์ž์„ธํžˆ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋‹ค!

Intrinsic Content Size

UILabel๋กœ ์œ„์˜ ์˜ˆ๋ฅผ ๋“ค์—ˆ์ง€๋งŒ, ์‚ฌ์‹ค UILabel์€ ํŠน์ˆ˜ํ•œ ์นœ๊ตฌ๋‹ค. ์šฐ๋ฆฌ๊ฐ€ ์ œ๋Œ€๋กœ autolayout์„ ์ •ํ•˜๋ ค๊ณ  ํ–ˆ๋‹ค๋ฉด ์‚ฌ์‹ค UIView๋กœ ํ•˜๋Š” ๊ฒŒ ๋งž๋‹ค. ์œ„์˜ ๋‚ด์šฉ์„ ์„ค๋ช…ํ•˜๋ ค๊ณ  ํ•˜๋‹ค๋ณด๋‹ˆ ๋ถ€๋“์ดํ•˜๊ฒŒ UILabel์„ ์‚ฌ์šฉํ–ˆ๋‹ค.

UILabel์ด ๋ญ๊ฐ€ ํŠน๋ณ„ํ• ๊นŒ? ์‚ฌ์‹ค ์œ„์—์„œ ์šฐ๋ฆฌ๋Š” layout์„ ๊ฑธ์–ด์ฃผ๋Š”๋ฐ ์žˆ์–ด์„œ, leading, trailing, top, bottom์˜ 4๊ฐœ๋งŒ ๊ฑธ์—ˆ๋‹ค. ๊ทธ๋Ÿผ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  label์€ ์ž์‹ ๋งŒ์˜ ํฌ๊ธฐ๋ฅผ ๊ฐ€์กŒ๊ณ , interface builder๋Š” ์•„๋ฌด ์˜ค๋ฅ˜๋„ ๋‚ด๋ฟœ์ง€ ์•Š์•˜๋‹ค.

ํ•˜์ง€๋งŒ ์‚ฌ์‹ค ์ด์ƒํ•˜์ง€ ์•Š์€๊ฐ€? ์–ด๋–ป๊ฒŒ ์ƒํ•˜์ขŒ์šฐ์˜ ์œ„์น˜๋งŒ ๊ฒฐ์ •ํ•ด์คฌ๋‹ค๊ณ  ํ•ด์„œ ํŠน์ • view์˜ ํฌ๊ธฐ๊ฐ€ ์ •ํ•ด์งˆ ์ˆ˜ ์žˆ์„๊นŒ? ์—ฌ๊ธฐ์„œ ํŠน๋ณ„ํ•จ์ด ๋ฐœ์ƒํ•œ๋‹ค.

UILabel์€ ์ž์‹ ๋งŒ์˜ ๊ณ ์œ ํ•œ ํฌ๊ธฐ๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋‹ค. ์šฐ๋ฆฌ๋Š” label์„ ๋ณดํ†ต ์‚ฌ์šฉํ•  ๋•Œ, ํŠน์ • string์„ ์ž…๋ ฅํ•ด์„œ ์‚ฌ์šฉํ•œ๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ์ด string์˜ ํฌ๊ธฐ๋งŒํผ์€ ์ ์–ด๋„ ๋ณด์—ฌ์ค˜์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ์ด๋ ‡๊ฒŒ ํŠน์ • UIView์˜ ํ•˜์œ„ ๊ฐ์ฒด๊ฐ€ ๊ณ ์œ ์˜ ํฌ๊ธฐ๋ฅผ ๊ฐ€์ง€๋Š” ๊ฒƒ์„ Intrinsic Content Size์ด๋ผ ํ•œ๋‹ค.

๊ทธ๋ž˜์„œ ์•„๊นŒ Label์˜ ๊ฒฝ์šฐ ์ ์šฉ๋˜์—ˆ๋˜ priority๋ฅผ ๋‹ค์‹œ๋ณด๋ฉด ์œ„์™€ ๊ฐ™๋‹ค. hugging์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” intrinsic size์— ๋งž์ถฐ์ง€๋ ค๋Š” ํŠน์„ฑ์ด๊ณ , compression์€ ์ด๋ฅผ ์ €์ง€ํ•˜๊ณ  ํ™•์žฅํ•˜๋ ค๋Š” ์†์„ฑ์ด๋‹ค.

์ข…๋ฅ˜

ViewIntrinsic Content Size
UIView, NSView์—†์Œ.
Slider๋„ˆ๋น„(iOS)๋งŒ ๊ทœ์ •ํ•œ๋‹ค.
์Šฌ๋ผ์ด๋”์˜ ์œ ํ˜•(OS X)์— ๋”ฐ๋ผ ๋„ˆ๋น„, ๋†’์ด ๋˜๋Š” ๋‘˜ ๋‹ค ์ •์˜ ํ•„์š”.
Label, Button, Switch, TextFieldWidth, Height ๋‘˜๋‹ค ์žˆ์Œ
TextView, ImageViewํฌ๊ธฐ๊ฐ€ ๋‹ค์–‘ํ•  ์ˆ˜ ์žˆ๋‹ค.

Reference