๊ธ€ ์ž‘์„ฑ์ž: ์ด์ง€์›๐ŸŒฉ๏ธ

๋ทฐ ๊ณ„์ธต ๊ตฌ์กฐ์˜ ๋ ˆ์ด์•„์›ƒ์€ ์ผ๋ จ์˜ ์„ ํ˜• ๋ฐฉ์ •์‹์œผ๋กœ ์ •์˜๋œ๋‹ค. ๊ฐ ์ œ์•ฝ์€ ๋‹จ์ผ ๋ฐฉ์ •์‹์„ ๋‚˜ํƒ€๋‚ธ๋‹ค.

์ด ์ œ์•ฝ ์กฐ๊ฑด์€ ๋นจ๊ฐ„์ƒ‰ ๋ทฐ์˜ ์„ ํ–‰ ๊ฐ€์žฅ์ž๋ฆฌ๊ฐ€ ํŒŒ๋ž€์ƒ‰ ๋ทฐ์˜ ํ›„ํ–‰ ๊ฐ€์žฅ์ž๋ฆฌ ์ดํ›„ 8.0 ํฌ์ธํŠธ์—ฌ์•ผ ํ•จ์„ ๋‚˜ํƒ€๋‚ธ๋‹ค. ๋ฐฉ์ •์‹์—๋Š” ์—ฌ๋Ÿฌ ๋ถ€๋ถ„์ด ์žˆ๋‹ค.

  • Item 1 → ๋ฐฉ์ •์‹์˜ ์ฒซ๋ฒˆ์งธ ํ•ญ๋ชฉ(์ด ๊ฒฝ์šฐ RedView)์ด๋‹ค. ํ•ญ๋ชฉ์€ ๋ทฐ ๋˜๋Š” Layout Guide ์ด์–ด์•ผ ํ•œ๋‹ค.
  • Attribute 1 → ์ฒซ๋ฒˆ์งธ ํ•ญ๋ชฉ(์ด ๊ฒฝ์šฐ RedView์˜ Leading)์— ์ œํ•œ๋  ์†์„ฑ์ด๋‹ค.
  • Relationship → ์™ผ์ชฝ๊ณผ ์˜ค๋ฅธ์ชฝ ์‚ฌ์ด์˜ ๊ด€๊ณ„. ๊ด€๊ณ„๋Š” ๊ฐ™์Œ, ํฌ๊ฑฐ๋‚˜ ๊ฐ™์Œ, ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์Œ์˜ ์„ธ ๊ฐ€์ง€ ๊ฐ’ ์ค‘ ํ•˜๋‚˜๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋‹ค. ์ด ๊ฒฝ์šฐ ์™ผ์ชฝ๊ณผ ์˜ค๋ฅธ์ชฝ์ด ๋™์ผํ•˜๋‹ค.
  • Multiplier → Attribute 2์˜ ๊ฐ’์— ์ด ๋ถ€๋™ ์†Œ์ˆ˜์  ์ˆ˜๋ฅผ ๊ณฑํ•œ๋‹ค. ์ด ๊ฒฝ์šฐ Multiplier๋Š” 1.0 ์ด๋‹ค.
  • Item 2 → ๋ฐฉ์ •์‹์˜ ๋‘๋ฒˆ์งธ ํ•ญ๋ชฉ(์ด ๊ฒฝ์šฐ BlueView)์ด๋‹ค. ์ฒซ๋ฒˆ์งธ ํ•ญ๋ชฉ๊ณผ ๋‹ฌ๋ฆฌ ๋น„์›Œ๋‘˜ ์ˆ˜ ์žˆ๋‹ค.
  • Attribute 2 → ๋‘๋ฒˆ์งธ ํ•ญ๋ชฉ(์ด ๊ฒฝ์šฐ BlueView์˜ Trailing)์— ์ œํ•œ๋  ์†์„ฑ์ด๋‹ค. ๋‘๋ฒˆ์งธ ํ•ญ๋ชฉ์ด ๋น„์–ด์žˆ์œผ๋ฉด ์ด ๊ฐ’์€ Not an Attribute ์ด์–ด์•ผ ํ•œ๋‹ค.
  • Constant → ์ƒ์ˆ˜ ๋ถ€๋™ ์†Œ์ˆ˜์  ์˜คํ”„์…‹ (์ด ๊ฒฝ์šฐ 8.0) ์ด ๊ฐ’์€ Attribute 2์˜ ๊ฐ’์— ์ถ”๊ฐ€๋œ๋‹ค.

๋Œ€๋ถ€๋ถ„์˜ ์ œ์•ฝ์€ ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค์—์„œ ๋‘ ํ•ญ๋ชฉ ๊ฐ„์˜ ๊ด€๊ณ„๋ฅผ ์ •์˜ํ•œ๋‹ค. ์ด๋Ÿฌํ•œ ํ•ญ๋ชฉ์€ ๋ทฐ ๋˜๋Š” Layout Guide์„ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ๋‹ค. ์ œ์•ฝ ์กฐ๊ฑด์€ ๋‹จ์ผ ํ•ญ๋ชฉ์˜ ์„œ๋กœ ๋‹ค๋ฅธ ๋‘ ์†์„ฑ ๊ฐ„์˜ ๊ด€๊ณ„๋ฅผ ์ •์˜ ํ•  ์ˆ˜๋„ ์žˆ๋‹ค. (์˜ˆ: ํ•ญ๋ชฉ์˜ ๋†’์ด์™€ ๋„ˆ๋น„ ์‚ฌ์ด์˜ ์ข…ํšก๋น„ ์„ค์ •). ํ•ญ๋ชฉ์˜ ๋†’์ด ๋˜๋Š” ๋„ˆ๋น„์— ์ƒ์ˆ˜ ๊ฐ’์„ ํ• ๋‹น ํ•  ์ˆ˜๋„ ์žˆ๋‹ค. ์ƒ์ˆ˜ ๊ฐ’์œผ๋กœ ์ž‘์—…ํ•  ๋•Œ ๋‘๋ฒˆ์งธ ํ•ญ๋ชฉ์€ ๋น„์›Œ๋‘๊ณ  ๋‘๋ฒˆ์งธ ์†์„ฑ์€ Not An Attribute๋กœ ์„ค์ •๋˜๋ฉฐ Constant๋Š” 0.0์œผ๋กœ ์„ค์ •๋œ๋‹ค.

 

์˜คํ†  ๋ ˆ์ด์•„์›ƒ ์†์„ฑ

์˜คํ†  ๋ ˆ์ด์•„์›ƒ์—์„œ ์†์„ฑ์€ ์ œํ•œ ๋  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์„ ์ •์˜ํ•œ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ์—ฌ๊ธฐ์—๋Š” ๋†’์ด, ๋„ˆ๋น„, ์ˆ˜์ง ๋ฐ ์ˆ˜ํ‰ ์ค‘์‹ฌ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋„ค ๊ฐœ์˜ ๋ชจ์„œ๋ฆฌ(leading, trailing, top, bottom)๊ฐ€ ํฌํ•จ๋œ๋‹ค. ํ…์ŠคํŠธ ํ•ญ๋ชฉ์—๋Š” ํ•˜๋‚˜ ์ด์ƒ์˜ ๊ธฐ๋ณธ ์†์„ฑ์ด ์žˆ๋‹ค.

 

์ƒ˜ํ”Œ ๋ฐฉ์ •์‹

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

์†์„ฑ์—๋Š” ๋‘ ๊ฐ€์ง€ ๊ธฐ๋ณธ ์œ ํ˜•์ด ์žˆ๋‹ค. ํฌ๊ธฐ ์†์„ฑ (์˜ˆ : Height ๋ฐ Width) ๋ฐ ์œ„์น˜ ์†์„ฑ (์˜ˆ : Leading, Left ๋ฐ Top). ํฌ๊ธฐ ์†์„ฑ์€ ์œ„์น˜๋ฅผ ํ‘œ์‹œํ•˜์ง€ ์•Š๊ณ  ํ•ญ๋ชฉ์˜ ํฌ๊ธฐ๋ฅผ ์ง€์ •ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋œ๋‹ค. ์œ„์น˜ ์†์„ฑ์€ ๋‹ค๋ฅธ ํ•ญ๋ชฉ๊ณผ ๊ด€๋ จ๋œ ํ•ญ๋ชฉ์˜ ์œ„์น˜๋ฅผ ์ง€์ •ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋œ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ํ•ญ๋ชฉ์˜ ํฌ๊ธฐ์— ๋Œ€ํ•œ ํ‘œ์‹œ๋Š” ์—†๋‹ค.

์ด๋Ÿฌํ•œ ์ฐจ์ด์ ์„ ์—ผ๋‘์—๋‘๊ณ  ๋‹ค์Œ ๊ทœ์น™์ด ์ ์šฉ๋œ๋‹ค.

  • ํฌ๊ธฐ ์†์„ฑ์„ ์œ„์น˜ ์†์„ฑ์œผ๋กœ ์ œํ•œ ํ•  ์ˆ˜ ์—†๋‹ค.
  • ์œ„์น˜ ์†์„ฑ์—๋Š” ์ƒ์ˆ˜ ๊ฐ’์„ ํ• ๋‹น ํ•  ์ˆ˜ ์—†๋‹ค.
  • ์œ„์น˜ ์†์„ฑ์—๋Š” ๋น„์‹๋ณ„ multiplier (1.0 ์ด์™ธ์˜ ๊ฐ’)๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค.
  • ์œ„์น˜ ์†์„ฑ์˜ ๊ฒฝ์šฐ ์ˆ˜์ง ์†์„ฑ์„ ์ˆ˜ํ‰ ์†์„ฑ์œผ๋กœ ์ œํ•œ ํ•  ์ˆ˜ ์—†๋‹ค.
  • ์œ„์น˜ ์†์„ฑ์˜ ๊ฒฝ์šฐ Leading ๋˜๋Š” Trailing ์†์„ฑ์„ ์™ผ์ชฝ ๋˜๋Š” ์˜ค๋ฅธ์ชฝ ์†์„ฑ์œผ๋กœ ์ œํ•œ ํ•  ์ˆ˜ ์—†๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด ํ•ญ๋ชฉ์˜ Top์„ ์ƒ์ˆ˜ ๊ฐ’ 20.0์œผ๋กœ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์€ ์ถ”๊ฐ€ ์ปจํ…์ŠคํŠธ ์—†์ด๋Š” ์˜๋ฏธ๊ฐ€ ์—†๋‹ค. ํ•ญ์ƒ ๋‹ค๋ฅธ ํ•ญ๋ชฉ๊ณผ ๊ด€๋ จํ•˜์—ฌ ํ•ญ๋ชฉ์˜ ์œ„์น˜ ์†์„ฑ์„ ์ •์˜ํ•ด์•ผํ•œ๋‹ค (์˜ˆ : ์ˆ˜ํผ ๋ทฐ์˜ ์ƒ๋‹จ ์•„๋ž˜ 20.0 ํฌ์ธํŠธ). ๊ทธ๋Ÿฌ๋‚˜ ํ•ญ๋ชฉ์˜ ๋†’์ด๋ฅผ 20.0์œผ๋กœ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์€ ์™„๋ฒฝํ•˜๊ฒŒ ์œ ํšจํ•œ๋‹ค.

// Setting a constant height
View.height = 0.0 * NotAnAttribute + 40.0

// Setting a fixed distance between two buttons
Button_2.leading = 1.0 * Button_1.trailing + 8.0

// Aligning the leading edge of two buttons
Button_1.leading = 1.0 * Button_2.leading + 0.0

// Give two buttons the same width
Button_1.width = 1.0 * Button_2.width + 0.0

// Center a view in its superview
View.centerX = 1.0 * Superview.centerX + 0.0
View.centerY = 1.0 * Superview.centerY + 0.0

// Give a view a constant aspect ratio
View.height = 2.0 * View.width + 0.0

 

ํ• ๋‹น์ด ์•„๋‹Œ ํ‰๋“ฑ

๋ฐฉ์ •์‹์€ ํ• ๋‹น์ด ์•„๋‹Œ ํ‰๋“ฑ์„ ๋‚˜ํƒ€๋‚ธ๋‹ค.

์˜คํ†  ๋ ˆ์ด์•„์›ƒ์ด ์ด๋Ÿฌํ•œ ๋ฐฉ์ •์‹์„ ํ’€ ๋•Œ ์˜ค๋ฅธ์ชฝ์˜ ๊ฐ’์„ ์™ผ์ชฝ์— ํ• ๋‹นํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋‹ค. ๋Œ€์‹  ๊ด€๊ณ„๋ฅผ true๋กœ ๋งŒ๋“œ๋Š” ์†์„ฑ 1๊ณผ ์†์„ฑ 2์˜ ๊ฐ’์„ ๊ณ„์‚ฐํ•œ๋‹ค. ์ฆ‰, ๋ฐฉ์ •์‹์˜ ํ•ญ๋ชฉ์„ ์ž์œ ๋กญ๊ฒŒ ์žฌ์ •๋ ฌ ํ•  ์ˆ˜ ์žˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๋ชฉ๋ก 3-2์˜ ๋ฐฉ์ •์‹์€ Note์˜ ํ•ด๋‹น ๋ฐฉ์ •์‹๊ณผ ๋™์ผํ•˜๋‹ค.

// Setting a fixed distance between two buttons
Button_1.trailing = 1.0 * Button_2.leading - 8.0

// Aligning the leading edge of two buttons
Button_2.leading = 1.0 * Button_1.leading + 0.0

// Give two buttons the same width
Button_2.width = 1.0 * Button.width + 0.0

// Center a view in its superview
Superview.centerX = 1.0 * View.centerX + 0.0
Superview.centerY = 1.0 * View.centerY + 0.0

// Give a view a constant aspect ratio
View.width = 0.5 * View.height + 0.0

ํ•ญ๋ชฉ์„ ์žฌ์ •๋ ฌํ•  ๋•Œ multiplier์™€ constant๋ฅผ ๋ฐ˜์ „ํ•ด์•ผ ํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด constant 8.0์€ -8.0์˜ multiplier์˜ ์Šน์ˆ˜ 2.0๋Š” 0.5์ด๋‹ค. constant 0.0๊ณผ multiplier 1.0์€ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๋Š”๋‹ค.

์˜คํ†  ๋ ˆ์ด์•„์›ƒ์€ ๋™์ผํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•œ๋‹ค. ์ด์ƒ์ ์œผ๋กœ๋Š” ์˜๋„๋ฅผ ๊ฐ€์žฅ ๋ช…ํ™•ํ•˜๊ฒŒ ์„ค๋ช…ํ•˜๋Š” ์†”๋ฃจ์…˜์„ ์„ ํƒํ•ด์•ผ ํ•œ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋‹ค๋ฅธ ๊ฐœ๋ฐœ์ž๋Š” ์˜์‹ฌํ•  ์—ฌ์ง€์—†์ด ์–ด๋–ค ์†”๋ฃจ์…˜์ด ๊ฐ€์žฅ ์ข‹์€์ง€์— ๋Œ€ํ•ด ๋™์˜ํ•˜์ง€ ์•Š์„ ๊ฒƒ์ด๋‹ค. ์—ฌ๊ธฐ์„œ ์ผ๊ด€์„ฑ์ด ์žˆ๋Š” ๊ฒƒ์ด ์˜ณ์€ ๊ฒƒ๋ณด๋‹ค ๋‚ซ๋‹ค. ์ ‘๊ทผ ๋ฐฉ์‹์„ ์„ ํƒํ•˜๊ณ  ํ•ญ์ƒ ์ด๋ฅผ ๊ณ ์ˆ˜ํ•œ๋‹ค๋ฉด ์žฅ๊ธฐ์ ์œผ๋กœ ๋ฌธ์ œ๋ฅผ ๋œ ๊ฒฝํ—˜ํ•˜๊ฒŒ ๋  ๊ฒƒ์ด๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์ด ๊ฐ€์ด๋“œ์—์„œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒฝํ—˜ ๊ทœ์น™์„ ์‚ฌ์šฉํ•œ๋‹ค.

  1. ๋ถ„์ˆ˜ multiplier๋ณด๋‹ค ์ •์ˆ˜ multiplier๊ฐ€ ์„ ํ˜ธ๋œ๋‹ค.
  2. ์Œ์˜ constant๋ณด๋‹ค ์–‘์˜ constant๊ฐ€ ์„ ํ˜ธ๋œ๋‹ค.
  3. ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ ๋ทฐ๋Š” ๋ ˆ์ด์•„์›ƒ ์ˆœ์„œ๋กœ ๋‚˜ํƒ€๋‚˜์•ผํ•œ๋‹ค: leading to trailing, top to bottom

 

๋ชจํ˜ธํ•˜์ง€ ์•Š๊ณ  ๋งŒ์กฑ์Šค๋Ÿฌ์šด ๋ ˆ์ด์•„์›ƒ ๋งŒ๋“ค๊ธฐ

์ด ๋ถ€๋ถ„์€ ๊ฐœ๋…๋ณด๋‹ค ์ง์ ‘์ ์ธ ์‹ค์Šต์ด ์ฃผ๋ฅผ ์ด๋ฃจ๊ณ  ์žˆ์–ด ๊ฑด๋„ˆ๋œ€

 

์ œ์•ฝ ๋ถˆํ‰๋“ฑ

์ง€๊ธˆ๊นŒ์ง€ ๋ชจ๋“  ์ƒ˜ํ”Œ์—์„œ ์ œ์•ฝ ์กฐ๊ฑด์ด ๋™๋“ฑํ•จ์„ ๋ณด์—ฌ์ฃผ์—ˆ์ง€๋งŒ ์ด๊ฒƒ์€ ์ด์•ผ๊ธฐ์˜ ์ผ๋ถ€์ผ๋ฟ์ด๋‹ค. ์ œ์•ฝ์€ ๋ถˆํ‰๋“ฑ์„ ๋‚˜ํƒ€๋‚ผ์ˆ˜๋„ ์žˆ๋‹ค. ํŠนํžˆ ์ œ์•ฝ ์กฐ๊ฑด์˜ ๊ด€๊ณ„๋Š” ๊ฐ™๊ฑฐ๋‚˜, ํฌ๊ฑฐ๋‚˜ ๊ฐ™๊ฑฐ๋‚˜, ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์„ ์ˆ˜ ์žˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด ์ œ์•ฝ ์กฐ๊ฑด์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ทฐ์˜ ์ตœ์†Œ ๋˜๋Š” ์ตœ๋Œ€ ํฌ๊ธฐ๋ฅผ ์ •์˜ํ•  ์ˆ˜ ์žˆ๋‹ค.

// Setting the minimum width
View.width >= 0.0 * NotAnAttribute + 40.0

// Setting the maximum width
View.width <= 0.0 * NotAnAttribute + 280.0

As soon as you start using inequalities, the two constraints per view per dimension rule breaks down. ํ•ญ์ƒ ๋‹จ์ผ ๊ฐ™์Œ ๊ด€๊ณ„๋ฅผ ๋‘ ๊ฐœ์˜ ๋ถ€๋“ฑ์‹์œผ๋กœ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ๋‹ค.

// 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

๋‘ ๋ถ€๋“ฑ์‹์ด ํ•ญ์ƒ ๋‹จ์ผ ๊ฐ™์Œ ๊ด€๊ณ„์™€ ๊ฐ™์ง€๋Š” ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๊ทธ ๋ฐ˜๋Œ€๊ฐ€ ํ•ญ์ƒ ์ฐธ์€ ์•„๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋ชฉ๋ก 3-3์˜ ๋ถ€๋“ฑ์‹์€ ๋ทฐ์˜ ๋„ˆ๋น„์— ๋Œ€ํ•ด ๊ฐ€๋Šฅํ•œ ๊ฐ’์˜ ๋ฒ”์œ„๋ฅผ ์ œํ•œํ•˜์ง€๋งŒ ๊ทธ ์ž์ฒด๋กœ๋Š” ๋„ˆ๋น„๋ฅผ ์ •์˜ํ•˜์ง€ ์•Š๋Š”๋‹ค. ์ด ๋ฒ”์œ„ ๋‚ด์—์„œ ๋ทฐ์˜ ์œ„์น˜์™€ ํฌ๊ธฐ๋ฅผ ์ •์˜ํ•˜๋ ค๋ฉด ์ถ”๊ฐ€ ์ˆ˜ํ‰ ์ œ์•ฝ ์กฐ๊ฑด์ด ํ•„์š”ํ•˜๋‹ค.

 

์ œ์•ฝ ์šฐ์„  ์ˆœ์œ„

๊ธฐ๋ณธ์ ์œผ๋กœ ๋ชจ๋“  ์ œ์•ฝ ์กฐ๊ฑด์ด ํ•„์š”ํ•˜๋‹ค. ์˜คํ†  ๋ ˆ์ด์•„์›ƒ์€ ๋ชจ๋“  ์ œ์•ฝ ์กฐ๊ฑด์„ ์ถฉ์กฑํ•˜๋Š” ์†”๋ฃจ์…˜์„ ๊ณ„์‚ฐํ•ด์•ผ ํ•œ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ์˜ค๋ฅ˜๊ฐ€ ์žˆ๋‹ค. ์˜คํ†  ๋ ˆ์ด์•„์›ƒ์€ ๋งŒ์กฑํ•  ์ˆ˜ ์—†๋Š” ์ œ์•ฝ ์กฐ๊ฑด์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์ฝ˜์†”์— ์ธ์‡„ํ•˜๊ณ  ์ค‘๋‹จํ•  ์ œ์•ฝ ์กฐ๊ฑด ์ค‘ ํ•˜๋‚˜๋ฅผ ์„ ํƒํ•œ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ์ œ์•ฝ ์กฐ๊ฑด์ด ๊นจ์ง€์ง€ ์•Š๊ณ  ์†”๋ฃจ์…˜์„ ๋‹ค์‹œ ๊ณ„์‚ฐํ•œ๋‹ค.

์„ ํƒ์  ์ œ์•ฝ ์กฐ๊ฑด์„ ๋งŒ๋“ค ์ˆ˜๋„ ์žˆ๋‹ค. ๋ชจ๋“  ์ œ์•ฝ ์กฐ๊ฑด์€ 1์—์„œ 1000 ์‚ฌ์ด์˜ ์šฐ์„  ์ˆœ์œ„๋ฅผ ๊ฐ–๋Š”๋‹ค. ์šฐ์„  ์ˆœ์œ„๊ฐ€ 1000์ธ ์ œ์•ฝ ์กฐ๊ฑด์ด ํ•„์š”ํ•˜๋‹ค. ๋‹ค๋ฅธ ๋ชจ๋“  ์ œ์•ฝ์€ ์„ ํƒ ์‚ฌํ•ญ์ด๋‹ค.

์†”๋ฃจ์…˜์„ ๊ณ„์‚ฐํ•  ๋•Œ ์˜คํ†  ๋ ˆ์ด์•„์›ƒ์€ ๊ฐ€์žฅ ๋†’์€ ์ˆœ์„œ์—์„œ ๊ฐ€์žฅ ๋‚ฎ์€ ์ˆœ์„œ๋กœ ๋ชจ๋“  ์ œ์•ฝ ์กฐ๊ฑด์„ ์ถฉ์กฑํ•˜๋ ค๊ณ  ํ•œ๋‹ค. ์„ ํƒ์  ์ œ์•ฝ ์กฐ๊ฑด์„ ์ถฉ์กฑํ•  ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ ํ•ด๋‹น ์ œ์•ฝ ์กฐ๊ฑด์„ ๊ฑด๋„ˆ๋›ฐ๊ณ  ๋‹ค์Œ ์ œ์•ฝ ์กฐ๊ฑด์œผ๋กœ ๊ณ„์† ์ง„ํ–‰ํ•œ๋‹ค.

์„ ํƒ์  ์ œ์•ฝ ์กฐ๊ฑด์„ ์ถฉ์กฑํ•  ์ˆ˜ ์—†๋”๋ผ๋„ ๋ ˆ์ด์•„์›ƒ์— ์˜ํ–ฅ์„ ๋ฏธ์น  ์ˆ˜ ์žˆ๋‹ค. ์ œ์•ฝ ์กฐ๊ฑด์„ ๊ฑด๋„ˆ ๋›ด ํ›„ ๋ ˆ์ด์•„์›ƒ์— ๋ชจํ˜ธ์„ฑ์ด ์žˆ์œผ๋ฉด ์‹œ์Šคํ…œ์€ ์ œ์•ฝ ์กฐ๊ฑด์— ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ์†”๋ฃจ์…˜์„ ์„ ํƒํ•œ๋‹ค. ์ด๋Ÿฐ์‹์œผ๋กœ ๋งŒ์กฑ์Šค๋Ÿฝ์ง€์•Š์€ ์„ ํƒ์  ์ œ์•ฝ์€ ๋ทฐ๋ฅผ ๋Œ์–ด๋‹น๊ธฐ๋Š” ํž˜์œผ๋กœ ์ž‘์šฉํ•œ๋‹ค.

์„ ํƒ์  ์ œ์•ฝ๊ณผ ๋ถˆํ‰๋“ฑ์€ ์ข…์ข… ํ•จ๊ป˜ ์ž‘๋™ํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๋ชฉ๋ก 3-4์—์„œ ๋‘ ๋ถ€๋“ฑ์‹์— ๋Œ€ํ•ด ๋‹ค๋ฅธ ์šฐ์„  ์ˆœ์œ„๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๋‹ค. ํฌ๊ฑฐ๋‚˜ ๊ฐ™์Œ ๊ด€๊ณ„๊ฐ€ ํ•„์š”ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ (์šฐ์„  ์ˆœ์œ„ 1000), ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์Œ ๊ด€๊ณ„์˜ ์šฐ์„  ์ˆœ์œ„๊ฐ€ ๋” ๋‚ฎ๋‹ค (์šฐ์„  ์ˆœ์œ„ 250). ์ด๋Š” ํŒŒ๋ž€์ƒ‰ ๋ทฐ๊ฐ€ ๋นจ์‚ฐ์ƒ‰ ๋ทฐ์—์„œ 8.0 ํฌ์ธํŠธ๋ณด๋‹ค ๊ฐ€๊นŒ์šธ ์ˆ˜ ์—†์Œ์„ ์˜๋ฏธํ•œ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋‹ค๋ฅธ ์ œ์•ฝ์œผ๋กœ ์ธํ•ด ๋” ๋ฉ€๋ฆฌ ๋–จ์–ด์งˆ ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋ž˜๋„ ์„ ํƒ์  ์ œ์•ฝ ์กฐ๊ฑด์€ ๋ ˆ์ด์•„์›ƒ์˜ ๋‹ค๋ฅธ ์ œ์•ฝ ์กฐ๊ฑด์ด ์ฃผ์–ด์กŒ์„ ๋•Œ ํŒŒ๋ž€์ƒ‰ ๋ทฐ๋ฅผ ๋นจ๊ฐ„์ƒ‰ ๋ทฐ์ชฝ์œผ๋กœ ๋‹น๊ฒจ ๊ฐ€๋Šฅํ•œ 8.0 ํฌ์ธํŠธ ๊ฐ„๊ฒฉ์— ๊ฐ€๊น๊ฒŒ ๋งŒ๋“ ๋‹ค.

 

๊ณ ์œ  ์ฝ˜ํ…์ธ  ํฌ๊ธฐ

์ง€๊ธˆ๊นŒ์ง€ ๋ชจ๋“  ์˜ˆ์ œ๋Š” ์ œ์•ฝ ์กฐ๊ฑด์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ทฐ์˜ ์œ„์น˜์™€ ํฌ๊ธฐ๋ฅผ ๋ชจ๋‘ ์ •์˜ํ–ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ผ๋ถ€ ๋ทฐ๋Š” ํ˜„์žฌ ์ฝ˜ํ…์ธ ๋ฅผ ๊ณ ๋ คํ•  ๋•Œ ์ž์—ฐ์Šค๋Ÿฌ์šด ํฌ๊ธฐ๋ฅผ ๊ฐ–๋Š”๋‹ค. ์ด๋ฅผ ๊ณ ์œ  ์ฝ˜ํ…์ธ  ํฌ๊ธฐ๋ผ๊ณ  ํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋ฒ„ํŠผ์˜ ๊ณ ์œ  ์ฝ˜ํ…์ธ  ํฌ๊ธฐ๋Š” ์ œ๋ชฉ ํฌ๊ธฐ์— ์ž‘์€ ์—ฌ๋ฐฑ์„ ๋”ํ•œ ๊ฒƒ์ด๋‹ค.

๋ชจ๋“  ๋ทฐ์— ๊ณ ์œ  ์ฝ˜ํ…์ธ  ํฌ๊ธฐ๊ฐ€ ์žˆ๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค. ๊ทธ๋ ‡๊ฒŒ ํ•˜๋Š” ๋ทฐ์˜ ๊ฒฝ์šฐ ๋‚ด์žฅ ์ฝ˜ํ…์ธ  ํฌ๊ธฐ๋Š” ๋ทฐ์˜ ๋†’์ด, ๋„ˆ๋น„ ๋˜๋Š” ๋‘˜ ๋‹ค๋ฅผ ์ •์˜ ํ•  ์ˆ˜ ์žˆ๋‹ค. ํ‘œ 3-1์—๋Š” ๋ช‡ ๊ฐ€์ง€ ์˜ˆ๊ฐ€ ๋‚˜์—ด๋˜์–ด ์žˆ๋‹ค.

๋ทฐ ๊ณ ์œ  ์ฝ˜ํ…์ธ  ํฌ๊ธฐ
UIView, NSView ๋ณธ์งˆ์ ์ธ ์ฝ˜ํ…์ธ  ํฌ๊ธฐ๊ฐ€ ์—†์Œ
์Šฌ๋ผ์ด๋” ๋„ˆ๋น„(iOS)๋งŒ ์ •์˜ํ•œ๋‹ค. ์Šฌ๋ผ์ด๋”์˜ ์œ ํ˜•(OS X)์— ๋”ฐ๋ผ ๋„ˆ๋น„, ๋†’์ด ๋˜๋Š” ๋‘˜ ๋‹ค๋ฅผ ์ •์˜ํ•œ๋‹ค.
๋ ˆ์ด๋ธ”, ๋ฒ„ํŠผ, ์Šค์œ„์น˜ ๋ฐ ํ…์ŠคํŠธ ํ•„๋“œ ๋†’์ด์™€ ๋„ˆ๋น„๋ฅผ ๋ชจ๋‘ ์ •์˜ํ•œ๋‹ค.
ํ…์ŠคํŠธ๋ทฐ ๋ฐ ์ด๋ฏธ์ง€๋ทฐ ๊ณ ์œ  ์ฝ˜ํ…์ธ  ํฌ๊ธฐ๋Š” ๋‹ค๋ฅผ ์ˆ˜ ์žˆ๋‹ค.

๊ธฐ๋ณธ ์ฝ˜ํ…์ธ  ํฌ๊ธฐ๋Š” ๋ทฐ์˜ ํ˜„์žฌ ์ฝ˜ํ…์ธ ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•œ๋‹ค. ๋ ˆ์ด๋ธ” ๋˜๋Š” ๋ฒ„ํŠผ์˜ ๊ณ ์œ  ์ฝ˜ํ…์ธ  ํฌ๊ธฐ๋Š” ํ‘œ์‹œ๋˜๋Š” ํ…์ŠคํŠธ์˜ ์–‘๊ณผ ์‚ฌ์šฉ๋œ ๊ธ€๊ผด์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•œ๋‹ค. ๋‹ค๋ฅธ ๋ทฐ์˜ ๊ฒฝ์šฐ ๊ณ ์œ  ์ฝ˜ํ…์ธ  ํฌ๊ธฐ๊ฐ€ ํ›จ์”ฌ ๋” ๋ณต์žกํ•˜๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๋นˆ ์ด๋ฏธ์ง€ ๋ทฐ์—๋Š” ๊ณ ์œ  ์ฝ˜ํ…์ธ  ํฌ๊ธฐ๊ฐ€ ์—†๋‹ค. ํ•˜์ง€๋งŒ ์ด๋ฏธ์ง€๋ฅผ ์ถ”๊ฐ€ํ•˜์ž์ž๋งˆ ๊ณ ์œ  ์ฝ˜ํ…์ธ  ํฌ๊ธฐ๊ฐ€ ์ด๋ฏธ์ง€ ํฌ๊ธฐ๋กœ ์„ค์ •๋œ๋‹ค.

ํ…์ŠคํŠธ๋ทฐ์˜ ๊ณ ์œ  ์ฝ˜ํ…์ธ  ํฌ๊ธฐ๋Š” ์ฝ˜ํ…์ธ , ์Šคํฌ๋กค ์‚ฌ์šฉ ์—ฌ๋ถ€ ๋ฐ ๋ทฐ์— ์ ์šฉ๋œ ๋‹ค๋ฅธ ์ œ์•ฝ ์กฐ๊ฑด์— ๋”ฐ๋ผ ๋‹ค๋ฅด๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์Šคํฌ๋กค์ด ํ™œ์„ฑํ™”๋œ ๊ฒฝ์šฐ ๋ทฐ์— ๊ณ ์œ  ์ฝ˜ํ…์ธ  ํฌ๊ธฐ๊ฐ€ ์—†๋‹ค. ์Šคํฌ๋กค์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์œผ๋ฉด ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ทฐ์˜ ๊ณ ์œ  ์ฝ˜ํ…์ธ  ํฌ๊ธฐ๋Š” ์ค„๋ฐ”๊ฟˆ์—†์ด ํ…์ŠคํŠธ ํฌ๊ธฐ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๊ณ„์‚ฐ๋œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ํ…์ŠคํŠธ์— ๋ฆฌํ„ด์ด ์—†๋Š” ๊ฒฝ์šฐ ์ฝ˜ํ…์ธ ๋ฅผ ํ•œ ์ค„์˜ ํ…์ŠคํŠธ๋กœ ๋ ˆ์ด์•„์›ƒํ•˜๋Š”๋ฐ ํ•„์š”ํ•œ ๋†’์ด์™€ ๋„ˆ๋น„๋ฅผ ๊ณ„์‚ฐํ•œ๋‹ค. ๋ทฐ์˜ ๋„ˆ๋น„๋ฅผ ์ง€์ •ํ•˜๊ธฐ ์œ„ํ•ด ์ œ์•ฝ ์กฐ๊ฑด์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒฝ์šฐ ๊ธฐ๋ณธ ์ฝ˜ํ…์ธ  ํฌ๊ธฐ๋Š” ๋„ˆ๋น„๊ฐ€ ์ง€์ •๋œ ํ…์ŠคํŠธ๋ฅผ ํ‘œ์‹œํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ๋†’์ด๋ฅผ ์ •์˜ํ•œ๋‹ค.

์˜คํ†  ๋ ˆ์ด์•„์›ƒ์€ ๊ฐ ์ฐจ์›์— ๋Œ€ํ•œ ํ•œ ์Œ์˜ ์ œ์•ฝ ์กฐ๊ฑด์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ทฐ์˜ ๊ณ ์œ  ์ฝ˜ํ…์ธ  ํฌ๊ธฐ๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค. content hugging์€ ๋ทฐ๋ฅผ ์•ˆ์ชฝ์œผ๋กœ ๋‹น๊ฒจ ์ฝ˜ํ…์ธ  ์ฃผ๋ณ€์— ๊ผญ ๋งž๋„๋ก ํ•œ๋‹ค. content compression์€ ์ฝ˜ํ…์ธ ๋ฅผ ์ž๋ฅด์ง€ ์•Š๋„๋ก ๋ทฐ๋ฅผ ๋ฐ”๊นฅ์ชฝ์œผ๋กœ ๋ฐ€์–ด๋‚ธ๋‹ค.

์ด๋Ÿฌํ•œ ์ œ์•ฝ์€ ๋ชฉ๋ก 3-5์— ํ‘œ์‹œ๋œ ๋ถ€๋“ฑ์‹์„ ์‚ฌ์šฉํ•˜์—ฌ ์ •์˜๋œ๋‹ค. ์—ฌ๊ธฐ์„œ IntrinsicHeight ๋ฐ IntricsicWidth ์ƒ์ˆ˜๋Š” ๋ทฐ์˜ ๊ณ ์œ  ์ฝ˜ํ…์ธ  ํฌ๊ธฐ์—์„œ ๋†’์ด ๋ฐ ๋„ˆ๋น„ ๊ฐ’์„ ๋‚˜ํƒ€๋‚ธ๋‹ค.

// Compression Resistance
View.height >= 0.0 * NotAnAttribute + IntrinsicHeight
View.width >= 0.0 * NotAnAttribute + IntrinsicWidth

// Content Hugging
View.height <= 0.0 * NotAnAttribute + IntrinsicHeight
View.width <= 0.0 * NotAnAttribute + IntrinsicWidth

์ด๋Ÿฌํ•œ ์ œ์•ฝ์€ ๊ฐ๊ฐ ๊ณ ์œ ํ•œ ์šฐ์„  ์ˆœ์œ„๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ทฐ๋Š” content hugging์— 250 ์šฐ์„  ์ˆœ์œ„๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  compression resistance์— 750 ์šฐ์„  ์ˆœ์œ„๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. ๋”ฐ๋ผ ๋ทฐ๋ฅผ ์ถ•์†Œํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ๋Š˜๋ฆฌ๋Š” ๊ฒƒ์ด ๋” ์‰ฝ๋‹ค. ๋Œ€๋ถ€๋ถ„์˜ ์ปจํŠธ๋กค๋Ÿฌ์—์„œ ์ด๊ฒƒ์ด ๋ฐ”๋žŒ์งํ•œ ๋™์ž‘์ด๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๊ธฐ๋ณธ ์ฝ˜ํ…์ธ  ํฌ๊ธฐ๋ณด๋‹ค ํฐ ๋ฒ„ํŠผ์„ ์•ˆ์ „ํ•˜๊ฒŒ ๋Š˜๋ฆด ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ถ•์†Œํ•˜๋ฉด ๋‚ด์šฉ์ด ์ž˜๋ฆด ์ˆ˜ ์žˆ๋‹ค. Interface Builder๋Š” ๊ด€๊ณ„๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ๋•Œ๋•Œ๋กœ ์ด๋Ÿฌํ•œ ์šฐ์„  ์ˆœ์œ„๋ฅผ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

๊ฐ€๋Šฅํ•˜๋ฉด ๋ ˆ์ด์•„์›ƒ์—์„œ ๋ทฐ์˜ ๊ณ ์œ  ์ฝ˜ํ…์ธ  ํฌ๊ธฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค. ๋ทฐ์˜ ์ฝ˜ํ…์ธ ๊ฐ€ ๋ณ€๊ฒฝ๋˜๋ฉด ๋ ˆ์ด์•„์›ƒ์ด ๋™์ ์œผ๋กœ ์กฐ์ •๋œ๋‹ค. ๋˜ํ•œ ๋ชจํ˜ธํ•˜์ง€ ์•Š๊ณ  ์ถฉ๋Œํ•˜์ง€ ์•Š๋Š” ๋ ˆ์ด์•„์›ƒ์„ ์ƒ์„ฑํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ์ œ์•ฝ์˜ ์ˆ˜๋ฅผ ์ค„์ด์ง€๋งŒ ๋ทฐ์˜ ์ฝ˜ํ…์ธ  ํฌ์˜น ๋ฐ ์••์ถ• ์ €ํ•ญ(CHCR) ์šฐ์„  ์ˆœ์œ„๋ฅผ ๊ด€๋ฆฌํ•ด์•ผํ•œ๋‹ค. ๋‹ค์Œ์€ ๊ณ ์œ  ์ฝ˜ํ…์ธ  ํฌ๊ธฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ๋ช‡๊ฐ€์ง€ ์ง€์นจ์ด๋‹ค.

  • ์ผ๋ จ์˜ ๋ทฐ๋ฅผ ํ™•์žฅํ•˜์—ฌ ๊ณต๊ฐ„์„ ์ฑ„์šธ ๋•Œ ๋ชจ๋“  ๋ทฐ์˜ content hugging ์šฐ์„  ์ˆœ์œ„๊ฐ€ ๋™์ผํ•˜๋ฉด ๋ ˆ์ด์•„์›ƒ์ด ๋ชจํ˜ธํ•˜๋‹ค. ์˜คํ†  ๋ ˆ์ด์•„์›ƒ์€ ์–ด๋–ค ๋ทฐ๋ฅผ ๋Š˜๋ ค์•ผํ•˜๋Š”์ง€ ์•Œ์ง€ ๋ชปํ•œ๋‹ค.
    ์ผ๋ฐ˜์ ์ธ ์˜ˆ๋Š” ๋ ˆ์ด๋ธ” ๋ฐ ํ…์ŠคํŠธ ํ•„๋“œ ์Œ์ด๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ๋ ˆ์ด๋ธ”์ด ๊ณ ์œ  ์ฝ˜ํ…์ธ  ํฌ๊ธฐ๋กœ ์œ ์ง€๋˜๋Š” ๋™์•ˆ ์ถ”๊ฐ€ ๊ณต๊ฐ„์„ ์ฑ„์šฐ๊ธฐ ์œ„ํ•ด ํ…์ŠคํŠธ ํ•„๋“œ๋ฅผ ๋Š˜๋ ค์•ผํ•œ๋‹ค. ์ด๋ฅผ ํ™•์ธํ•˜๋ ค๋ฉด ํ…์ŠคํŠธ ํ•„๋“œ์˜ ๊ฐ€๋กœ content hugging ์šฐ์„  ์ˆœ์œ„๊ฐ€ ๋ ˆ์ด๋ธ”๋ณด๋‹ค ๋‚ฎ์€์ง€ ํ™•์ธํ•œ๋‹ค.
    ์‹ค์ œ๋กœ ์ด ์˜ˆ์ œ๋Š” ๋งค์šฐ ์ผ๋ฐ˜์ ์ด์–ด์„œ Interface Builder๊ฐ€ ์ž๋™์œผ๋กœ ์ด๋ฅผ ์ฒ˜๋ฆฌํ•˜์—ฌ ๋ชจ๋“  ๋ ˆ์ด๋ธ”์˜ content hugging ์šฐ์„  ์ˆœ์œ„๋ฅผ 251๋กœ ์„ค์ •ํ•œ๋‹ค. ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐฉ์‹์œผ๋กœ ๋ ˆ์ด์•„์›ƒ์„ ๋งŒ๋“œ๋Š” ๊ฒฝ์šฐ content hugging ์šฐ์„  ์ˆœ์œ„๋ฅผ ์ง์ ‘ ์ˆ˜์ •ํ•ด์•ผ ํ•œ๋‹ค.
  • ๋ณด์ด์ง€ ์•Š๋Š” ๋ฐฐ๊ฒฝ(์˜ˆ: ๋ฒ„ํŠผ ๋˜๋Š” ๋ ˆ์ด๋ธ”)์ด ์žˆ๋Š” ๋ทฐ๊ฐ€ ์›๋ž˜ ์ฝ˜ํ…์ธ  ํฌ๊ธฐ๋ฅผ ๋„˜์–ด์„œ ์‹ค์ˆ˜๋กœ ๋Š˜์–ด๋‚œ ๊ฒฝ์šฐ ์ด์ƒํ•˜๊ณ  ์˜ˆ๊ธฐ์น˜ ์•Š์€ ๋ ˆ์ด์•„์›ƒ์ด ์ข…์ข… ๋ฐœ์ƒํ•œ๋‹ค. ํ…์ŠคํŠธ๊ฐ€ ์ž˜๋ชป๋œ ์œ„์น˜์— ํ‘œ์‹œ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์‹ค์ œ ๋ฌธ์ œ๊ฐ€ ๋ช…ํ™•ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ๋‹ค.
    ์›ํ•˜์ง€ ์•Š๋Š” ํ™•์žฅ์„ ๋ฐฉ์ง€ํ•˜๋ ค๋ฉด content hugging ์šฐ์„  ์ˆœ์œ„๋ฅผ ๋†’์ด๋ฉด ๋œ๋‹ค.
  • ๊ธฐ์ค€์„  ์ œ์•ฝ ์กฐ๊ฑด์€ ๊ณ ์œ  ์ฝ˜ํ…์ธ  ๋†’์ด์— ์žˆ๋Š” ๋ทฐ์—์„œ๋งŒ ์ž‘๋™ํ•œ๋‹ค. ๋ทฐ๊ฐ€ ์ˆ˜์ง์œผ๋กœ ๋Š˜์–ด๋‚˜๊ฑฐ๋‚˜ ์••์ถ•๋˜๋ฉด ๊ธฐ์ค€์„  ๊ตฌ์† ์กฐ๊ฑด์ด ๋” ์ด์ƒ ์ œ๋Œ€๋กœ ์ •๋ ฌ๋˜์ง€ ์•Š๋Š”๋‹ค.
  • ์Šค์œ„์น˜์™€ ๊ฐ™์€ ์ผ๋ถ€ ๋ทฐ๋Š” ํ•ญ์ƒ ๊ณ ์œ  ์ฝ˜ํ…์ธ  ํฌ๊ธฐ๋กœ ํ‘œ์‹œ๋˜์–ด์•ผํ•œ๋‹ค. ์ŠคํŠธ๋ ˆ์นญ ๋˜๋Š” ์••์ถ•์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ํ•„์š”์— ๋”ฐ๋ผ CHCR ์šฐ์„  ์ˆœ์œ„๋ฅผ ๋†’์ธ๋‹ค.
  • ๋ทฐ์— ํ•„์š”ํ•œ CHCR ์šฐ์„  ์ˆœ์œ„๋ฅผ ์ œ๊ณตํ•˜๋ฉด ์•ˆ๋œ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ๋ทฐ์˜ ํฌ๊ธฐ๊ฐ€ ์ž˜๋ชป๋œ ๊ฒƒ์ด ์šฐ์—ฐํžˆ ์ถฉ๋Œ์„ ์ผ์œผํ‚ค๋Š” ๊ฒƒ๋ณด๋‹ค ๋‚ซ๋‹ค. ๋ทฐ๊ฐ€ ํ•ญ์ƒ ๊ณ ์œ  ์ฝ˜ํ…์ธ  ํฌ๊ธฐ์—ฌ์•ผํ•˜๋Š” ๊ฒฝ์šฐ ๋Œ€์‹  ๋งค์šฐ ๋†’์€ ์šฐ์„  ์ˆœ์œ„(999)๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค. ์ด ์ ‘๊ทผ ๋ฐฉ์‹์€ ์ผ๋ฐ˜์ ์œผ๋กœ ๋ทฐ๊ฐ€ ๋Š˜์–ด๋‚˜๊ฑฐ๋‚˜ ์••์ถ•๋˜์ง€ ์•Š๋„๋ก ํ•˜์ง€๋งŒ ์˜ˆ์ƒ๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ์ž‘์€ ํ™˜๊ฒฝ์—์„œ ๋ทฐ๊ฐ€ ํ‘œ์‹œ๋˜๋Š” ๊ฒฝ์šฐ์— ๋Œ€๋น„ํ•˜์—ฌ ์—ฌ์ „ํžˆ ๋น„์ƒ ์••๋ ฅ ๋ฐธ๋ธŒ๋ฅผ ์ œ๊ณตํ•œ๋‹ค.

 

๊ณ ์œ  ์ฝ˜ํ…์ธ  ํฌ๊ธฐ ๋Œ€ ํ”ผํŒ… ํฌ๊ธฐ

๊ณ ์œ  ์ฝ˜ํ…์ธ  ํฌ๊ธฐ๋Š” ์˜คํ†  ๋ ˆ์ด์•„์›ƒ์— ๋Œ€ํ•œ ์ž…๋ ฅ ์—ญํ• ์„ ํ•œ๋‹ค. ๋ทฐ์— ๊ณ ์œ  ์ฝ˜ํ…์ธ  ํฌ๊ธฐ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ ์‹œ์Šคํ…œ์€ ํ•ด๋‹น ํฌ๊ธฐ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ œ์•ฝ ์กฐ๊ฑด์„ ์ƒ์„ฑํ•˜๊ณ  ์ œ์•ฝ ์กฐ๊ฑด์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ ˆ์ด์•„์›ƒ์„ ๊ณ„์‚ฐํ•œ๋‹ค.

๋ฐ˜๋ฉด์— ํ”ผํŒ… ํฌ๊ธฐ๋Š” ์˜คํ†  ๋ ˆ์ด์•„์›ƒ ์—”์ง„์˜ ์ถœ๋ ฅ์ž…๋‹ˆ๋‹ค. ๋ทฐ์˜ ์ œ์•ฝ ์กฐ๊ฑด์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ทฐ์— ๋Œ€ํ•ด ๊ณ„์‚ฐ๋œ ํฌ๊ธฐ์ด๋‹ค. ๋ทฐ๊ฐ€ ์˜คํ†  ๋ ˆ์ด์•„์›ƒ์„ ์‚ฌ์šฉํ•˜์—ฌ ํ•˜์œ„ ๋ทฐ๋ฅผ ๋ ˆ์ด์•„์›ƒํ•˜๋Š” ๊ฒฝ์šฐ ์‹œ์Šคํ…œ์€ ํ•ด๋‹น ๋‚ด์šฉ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ทฐ์— ๋งž๋Š” ํฌ๊ธฐ๋ฅผ ๊ณ„์‚ฐํ•  ์ˆ˜ ์žˆ๋‹ค.

์Šคํƒ๋ทฐ๊ฐ€ ์ข‹์€ ์˜ˆ๋‹ค. ๋‹ค๋ฅธ ์ œ์•ฝ ์กฐ๊ฑด์„ ์ œ์™ธํ•˜๊ณ  ์‹œ์Šคํ…œ์€ ์ฝ˜ํ…์ธ  ๋ฐ ์†์„ฑ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์Šคํƒ ๋ทฐ์˜ ํฌ๊ธฐ๋ฅผ ๊ณ„์‚ฐํ•œ๋‹ค. ์—ฌ๋Ÿฌ๋ฉด์—์„œ ์Šคํƒ ๋ทฐ๋Š” ๊ณ ์œ ํ•œ ์ฝ˜ํ…์ธ  ํฌ๊ธฐ๊ฐ€ ์žˆ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ์ž‘๋™ํ•œ๋‹ค. ๋‹จ์ผ ์ˆ˜์ง ๋ฐ ๋‹จ์ผ ์ˆ˜ํ‰ ์ œ์•ฝ ์กฐ๊ฑด ๋งŒ ์‚ฌ์šฉํ•˜์—ฌ ์œ„์น˜๋ฅผ ์ •์˜ํ•˜๋Š” ์œ ํšจํ•œ ๋ ˆ์ด์•„์›ƒ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ํฌ๊ธฐ๋Š” ์˜คํ†  ๋ ˆ์ด์•„์›ƒ์— ์˜ํ•ด ๊ณ„์‚ฐ๋˜๋ฉฐ ์˜คํ†  ๋ ˆ์ด์•„์›ƒ์— ๋Œ€ํ•œ ์ž…๋ ฅ์ด ์•„๋‹ˆ๋‹ค. ์Šคํƒ๋ทฐ์—๋Š” ๊ณ ์œ  ์ฝ˜ํ…์ธ  ํฌ๊ธฐ๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— ์Šคํƒ๋ทฐ์˜ CHCR ์šฐ์„  ์ˆœ์œ„๋ฅผ ์„ค์ •ํ•ด๋„ ํšจ๊ณผ๊ฐ€ ์—†๋‹ค.

์Šคํƒ๋ทฐ ์™ธ๋ถ€์˜ ํ•ญ๋ชฉ์„ ๊ธฐ์ค€์œผ๋กœ ์Šคํƒ๋ทฐ์˜ ํ”ผํŒ… ํฌ๊ธฐ๋ฅผ ์กฐ์ •ํ•ด์•ผํ•˜๋Š” ๊ฒฝ์šฐ ํ•ด๋‹น ๊ด€๊ณ„๋ฅผ ์บก์ฒ˜ํ•˜๊ธฐ ์œ„ํ•œ ๋ช…์‹œ์  ์ œ์•ฝ ์กฐ๊ฑด์„ ์ƒ์„ฑํ•˜๊ฑฐ๋‚˜ ์Šคํƒ ์™ธ๋ถ€ ํ•ญ๋ชฉ์— ๋Œ€ํ•œ ์Šคํƒ ์ฝ˜ํ…์ธ ์˜ CHCR ์šฐ์„  ์ˆœ์œ„๋ฅผ ์ˆ˜์ •ํ•œ๋‹ค.

 

๊ฐ€์น˜ ํ•ด์„

์˜คํ†  ๋ ˆ์ด์•„์›ƒ์˜ ๊ฐ’์€ ํ•ญ์ƒ ํฌ์ธํŠธ ๋‹จ์œ„์ด๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด๋Ÿฌํ•œ ์ธก์ •์˜ ์ •ํ™•ํ•œ ์˜๋ฏธ๋Š” ๊ด€๋ จ๋œ ์†์„ฑ๊ณผ ๋ทฐ์˜ ๋ ˆ์ด์•„์›ƒ ๋ฐฉํ–ฅ์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์งˆ ์ˆ˜ ์žˆ๋‹ค.

Auto Layout Attributes Value Notes
Height, Width ๋ทฐ์˜ ํฌ๊ธฐ ์ด๋Ÿฌํ•œ ์†์„ฑ์€ ์ƒ์ˆ˜ ๊ฐ’์„ ํ• ๋‹นํ•˜๊ฑฐ๋‚˜ ๋‹ค๋ฅธ ๋†’์ด ๋ฐ ๋„ˆ๋น„ ์†์„ฑ๊ณผ ๊ฒฐํ•ฉํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด ๊ฐ’์€ ์Œ์ˆ˜์ผ ์ˆ˜ ์—†๋‹ค.
Top, Bottom, Baseline ํ™”๋ฉด ์•„๋ž˜๋กœ ์ด๋™ํ•˜๋ฉด ๊ฐ’์ด ์ฆ๊ฐ€ํ•œ๋‹ค. ์ด๋Ÿฌํ•œ ์†์„ฑ์€ Center Y, Top, Bottom ๋ฐ Baseline ์†์„ฑ๊ณผ๋งŒ ๊ฒฐํ•ฉ ํ•  ์ˆ˜ ์žˆ๋‹ค.
Leading, Trailing ํ›„ํ–‰(Trailing) ๊ฐ€์žฅ์ž๋ฆฌ๋กœ ์ด๋™ํ•˜๋ฉด ๊ฐ’์ด ์ฆ๊ฐ€ํ•œ๋‹ค. ์™ผ์ชฝ์—์„œ ์˜ค๋ฅธ์ชฝ ๋ ˆ์ด์•„์›ƒ ๋ฐฉํ–ฅ์˜ ๊ฒฝ์šฐ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ์ด๋™ํ•˜๋ฉด ๊ฐ’์ด ์ฆ๊ฐ€ํ•œ๋‹ค. ์˜ค๋ฅธ์ชฝ์—์„œ ์™ผ์ชฝ ๋ ˆ์ด์•„์›ƒ ๋ฐฉํ–ฅ์˜ ๊ฒฝ์šฐ ์™ผ์ชฝ์œผ๋กœ ์ด๋™ํ•˜๋ฉด ๊ฐ’์ด ์ฆ๊ฐ€ํ•œ๋‹ค. ์ด๋Ÿฌํ•œ ์†์„ฑ์€ Left, Right ๋ฐ Center X ์†์„ฑ๊ณผ ๋งŒ ๊ฒฐํ•ฉ ํ•  ์ˆ˜ ์žˆ๋‹ค.
Left, Right ์˜ค๋ฅธ์ชฝ์œผ๋กœ ์ด๋™ํ•˜๋ฉด ๊ฐ’์ด ์ฆ๊ฐ€ํ•œ๋‹ค. Left ๋ฐ Right ์†์„ฑ์„ ์‚ฌ์šฉํ•˜์ง€ ๋งˆ์‹œ์˜ค. ๋Œ€์‹  Leading ๋ฐ Trailing์„ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค. ์ด๋ ‡๊ฒŒํ•˜๋ฉด ๋ ˆ์ด์•„์›ƒ์ด ๋ทฐ์˜ ์ฝ๊ธฐ ๋ฐฉํ–ฅ์— ๋งž๊ฒŒ ์กฐ์ •๋œ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ ์ฝ๊ธฐ ๋ฐฉํ–ฅ์€ ์‚ฌ์šฉ์ž๊ฐ€ ์„ค์ •ํ•œ ํ˜„์žฌ ์–ธ์–ด์— ๋”ฐ๋ผ ๊ฒฐ์ •๋œ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ํ•„์š”ํ•œ ๊ฒฝ์šฐ ์ด๋ฅผ ์žฌ์ •์˜ ํ•  ์ˆ˜ ์žˆ๋‹ค. iOS์—์„œ ์ œ์•ฝ ์กฐ๊ฑด (์ œ์•ฝ ์กฐ๊ฑด์˜ ์˜ํ–ฅ์„๋ฐ›๋Š” ๋ชจ๋“  ๋ทฐ์˜ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ๊ณตํ†ต ์กฐ์ƒ)์„ ๋ณด์œ ํ•œ ๋ทฐ์—์„œ semanticContentAttribute ์†์„ฑ์„ ์„ค์ •ํ•˜์—ฌ ์™ผ์ชฝ์—์„œ ์˜ค๋ฅธ์ชฝ๊ณผ ์˜ค๋ฅธ์ชฝ์—์„œ ์™ผ์ชฝ์œผ๋กœ ์ „ํ™˜ ํ•  ๋•Œ ์ฝ˜ํ…์ธ ์˜ ๋ ˆ์ด์•„์›ƒ์„ ๋’ค์ง‘์„ ์ง€ ์—ฌ๋ถ€๋ฅผ ์ง€์ •ํ•œ๋‹ค.
Center X, Center Y ํ•ด์„์€ ๋ฐฉ์ •์‹์˜ ๋‹ค๋ฅธ ์†์„ฑ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•œ๋‹ค. Center X๋Š” Center X, Leading, Trailing, Right ๋ฐ Left ์†์„ฑ๊ณผ ๊ฒฐํ•ฉ ๋  ์ˆ˜ ์žˆ๋‹ค. Center Y๋Š” Center Y, Top, Bottom ๋ฐ Baseline ์†์„ฑ๊ณผ ๊ฒฐํ•ฉ ๋  ์ˆ˜ ์žˆ๋‹ค.
๋ฐ˜์‘ํ˜•