๐ŸŽ ์•„์ด-์˜ค-์—์Šค/๐Ÿ“ฑ iOS ๊ฐœ๋ฐœ

[iOS] iOS๋Š” ํ™”๋ฉด์„ ์–ด๋–ป๊ฒŒ ๊ทธ๋ฆด๊นŒ? RunLoop ๋ถ€ํ„ฐ Constraint, Layout, Display ๊นŒ์ง€

๊ฐœ๋ฐœํ•˜๋Š” ํ›ˆ์ด 2021. 12. 23. 04:12

๋Ÿฐ๋ฃจํ”„๋ถ€ํ„ฐ ํ™”๋ฉด์— ๋ทฐ๊ฐ€ ๊ทธ๋ ค์ง€๊ธฐ๊นŒ์ง€.

์Šคํ„ฐ๋””๋ฅผ ํ•˜๋ฉด์„œ ๊ธฐ์ˆ ๋ฐœํ‘œ๊ฐ€ ์žˆ์—ˆ๋Š”๋ฐ์š”, ์ค€๋น„ํ•œ ๋‚ด์šฉ์„ ์ •๋ฆฌํ•ด๋‘๊ฒ ์Šต๋‹ˆ๋‹ค! ๊ฑฐ์˜ ํ”ผํ”ผํ‹ฐ์— ๋ชจ๋“ ๊ฑธ ๋‹ค ๋‹ด์•„์„œ ๊ธ€์€ ๋งŽ์ด ์—†์„ ๊ฒƒ ๊ฐ™์•„์š”ใ…Žใ…Ž

RunLoop(๋Ÿฐ๋ฃจํ”„)

iOS์—์„œ ๋ฐœ์ƒํ•˜๋Š” ๋ชจ๋“  ์ด๋ฒคํŠธ๋Š” RunLoop๋ฅผ ๊ฑฐ์ณ ์ฒ˜๋ฆฌ๋˜๊ธฐ ๋•Œ๋ฌธ์— RunLoop์— ๋Œ€ํ•œ ์ดํ•ด๊ฐ€ ๋จผ์ € ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค!

๊ฐ„๋žตํ•˜๊ฒŒ ์„ค๋ช…ํ•˜๋ฉด, RunLoop๋Š” ๋ชจ๋“  ์Šค๋ ˆ๋“œ์— ํ•˜๋‚˜์”ฉ ์กด์žฌํ•˜๋ฉด์„œ ์‹œ์Šคํ…œ์— ๋“ค์–ด์˜ค๋Š” ๋‘ ์ข…๋ฅ˜์˜ ์ด๋ฒคํŠธ, Input Source์™€ Timer Source๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ ๋ฃจํ”„์ž…๋‹ˆ๋‹ค.

 

UIApplication์ด ์‹คํ–‰์‹œ์ผœ์ฃผ๋Š” ๋ฉ”์ธ ์Šค๋ ˆ๋“œ๋ฅผ ์ œ์™ธํ•˜๊ณ ๋Š” ๋Ÿฐ๋ฃจํ”„๋Š” ์ž๋™์œผ๋กœ ์‹คํ–‰๋˜์ง€ ์•Š์•„์š”!

 

 

๋Ÿฐ๋ฃจํ”„๋Š” ์ด๋Ÿฐ ๊ณผ์ •์„ ๊ฑฐ์ณ์„œ ์‹คํ–‰๋˜๋Š”๋ฐ์š”, ์‹œ์Šคํ…œ์— ๋“ค์–ด์˜ค๋Š” ์ด๋ฒคํŠธ๋“ค์€ ๊ณง๋ฐ”๋กœ ๋Ÿฐ๋ฃจํ”„๋กœ ์ „๋‹ฌ๋˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ Event Queue๋ผ๋Š” ๋Œ€๊ธฐ์—ด์— ์Œ“์ด๊ณ , ๋Ÿฐ๋ฃจํ”„๋Š” ์‹คํ–‰์ด ๋  ๋•Œ ์—ฌ๊ธฐ์— ์žˆ๋Š” ์ด๋ฒคํŠธ๋“ค์„ ๊ฐ€์ ธ์™€ ์ฒ˜๋ฆฌํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. 

 

๋Ÿฐ๋ฃจํ”„๊ฐ€ ๊ฐ€์ ธ์˜จ ์ด๋ฒคํŠธ๋“ค์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐ์ฒด์— ์ „๋‹ฌ๋˜๊ณ , ์ด ๊ฐ์ฒด๋Š” ๊ฐ ์ด๋ฒคํŠธ๋“ค์„ ์ฒ˜๋ฆฌํ•˜๋Š” ์„œ๋น„์Šค ๋ฃจํ‹ด์„ ์ฐพ์•„ ์‹คํ–‰์‹œํ‚ค์ฃ . ์ด ์„œ๋น„์Šค ๋ฃจํ‹ด์—๋Š” ์šฐ๋ฆฌ๊ฐ€ ์ž‘์„ฑํ•œ ์ฝ”๋“œ๋„ ํฌํ•จ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 

 

์„œ๋น„์Šค ๋ฃจํ‹ด์ด ์ข…๋ฃŒ๋˜๋ฉด ํ•จ์ˆ˜๋“ค์ด ๋ชจ๋‘ ๋ฐ˜ํ™˜๋˜๊ฒ ์ฃ ? ๋Ÿฐ๋ฃจํ”„๋Š” ์ž์‹ ์˜ ์‚ฌ์ดํด์— ์‹คํ–‰์‹œ์ผฐ๋˜ ํ•จ์ˆ˜๋“ค์ด ๋ชจ๋‘ ๋ฐ˜ํ™˜๋˜๋ฉด Update Cycle์ด๋ผ๋Š” ํŠน๋ณ„ํ•œ ๋ฃจํ‹ด์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

 

Update Cycle

์—…๋ฐ์ดํŠธ ์‚ฌ์ดํด์€ Layout, Display, Constraint๋ฅผ ๊ฐฑ์‹ ํ•˜๋Š” ์ž‘์—…์˜ ์‚ฌ์ดํด์ธ๋ฐ์š”, ์ € ์„ธ ์นœ๊ตฌ๋“ค์„ ์•„๋ž˜์—์„œ ๋ฐ”๋กœ ์„ค๋ช…ํ•˜๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ์ง€๊ธˆ์€ ๋Œ€๋žต์ ์œผ๋กœ ํ™”๋ฉด์„ ์—…๋ฐ์ดํŠธํ•œ๋‹ค! ๋ผ๊ณ  ์ƒ๊ฐํ•ด๋ณด๋ฉด ๋  ๊ฒƒ ๊ฐ™์•„์š”.

 

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

 

์—…๋ฐ์ดํŠธ ์‚ฌ์ดํด์€ ๋Œ€๋žต 1์ดˆ์— 60๋ฒˆ ์ •๋„์˜ ์‚ฌ์ดํด์„ ๋Œ๊ฒŒ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์‚ฌ์šฉ์ž๊ฐ€ ๋ฐœ์ƒ์‹œํ‚จ ์ด๋ฒคํŠธ์— ๋Œ€ํ•ด ๊ณง๋ฐ”๋กœ ๋ฐ˜์‘ํ•˜์ง€ ์•Š์•„๋„ ์‚ฌ์šฉ์ž๋Š” ๋‚ด๋ถ€์ ์œผ๋กœ ์–ด๋–ค์ผ์ด ์ผ์–ด๋‚ฌ๋Š”์ง€ ์•Œ ์ˆ˜ ์—†์ฃ .

 

ํ•˜์ง€๋งŒ ์–ด๋–ค ๊ฒฝ์šฐ์—๋Š” ์ฆ‰๊ฐ์ ์ธ ์—…๋ฐ์ดํŠธ๊ฐ€ ํ•„์š”ํ•  ๋•Œ๊ฐ€ ์žˆ๊ฒ ์ฃ ? ๊ทธ๋ž˜์„œ UIView๋Š” ๊ฐœ๋ฐœ์ž๋“ค์ด ์—…๋ฐ์ดํŠธ ์‚ฌ์ดํด์„ ์ œ์–ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ฉ”์†Œ๋“œ๋“ค์„ ์ œ๊ณตํ•˜๊ฒŒ๋ฉ๋‹ˆ๋‹ค.

 

Layout

๊ทธ๋Ÿผ ๋ ˆ์ด์•„์›ƒ์ด ๋ญ˜๊นŒ์š”? ๋‹จ์ˆœํ•ฉ๋‹ˆ๋‹ค. ๋ ˆ์ด์•„์›ƒ์€ ์–ด๋–ค ๋ทฐ์˜ ํฌ๊ธฐ(๊ฐ€๋กœ, ์„ธ๋กœ)์™€ ์œ„์น˜(x, y)๋ฅผ ์˜๋ฏธํ•ด์š”! ์ฆ‰, ํ”„๋ ˆ์ž„ ๊ทธ ์ž์ฒด์ž…๋‹ˆ๋‹ค.

๋ชจ๋“  ๋ทฐ๋Š” ํ”„๋ ˆ์ž„์„ ๊ฐ€์ง€๊ณ  ์žˆ์ฃ . ๊ทธ๋ž˜์„œ UIView์—๋Š” ์ด ๋ ˆ์ด์•„์›ƒ์„ ์—…๋ฐ์ดํŠธํ•˜๋Š” ์‚ฌ์ดํด์„ ์ œ์–ดํ•˜๋Š” ๋ช‡๊ฐ€์ง€ ๋ฉ”์†Œ๋“œ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

 

LayoutSubviews

layoutSubviews๋Š” ์ด ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•œ ๋ทฐ์™€ ๊ทธ ํ•˜์œ„์— ์žˆ๋Š” ๋ชจ๋“  subview์˜ ์œ„์น˜์™€ ํฌ๊ธฐ๋ฅผ ๋ณ€๊ฒฝํ•˜๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. 

์ด ๋ฉ”์†Œ๋“œ๊ฐ€ ๋ถˆ๋ ธ์„ ๋•Œ ๋ณ€๊ฒฝ์‚ฌํ•ญ์ด ์—†๋Š” ๋ทฐ๋“ค๋„ ๋‹ค ๋‹ค์‹œ ๊ทธ๋ฆฌ๋ฉด ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ๋„ˆ๋ฌด ํฌ๊ฒ ์ฃ ? ๊ทธ๋ž˜์„œ ์‹œ์Šคํ…œ์€ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์žˆ์„ ๋•Œ๋งˆ๋‹ค ํ•ด๋‹น ๋ทฐ์— ์—…๋ฐ์ดํŠธ๊ฐ€ ํ•„์š”ํ•˜๋‹ค๋Š” ๋งˆํ‚น์„ ๋ถ™์—ฌ๋‘ก๋‹ˆ๋‹ค.

 

๊ทธ๋ฆฌ๊ณ  ์—…๋ฐ์ดํŠธ ์‚ฌ์ดํด์ด ์‹œ์ž‘๋˜์–ด์„œ layoutSubviews๊ฐ€ ํ˜ธ์ถœ๋˜๋ฉด ๋งˆํ‚น๋œ ๋ทฐ์™€ ์„œ๋ธŒ๋ทฐ๋“ค์„ ์ฐพ์•„๊ฐ€ ๋ ˆ์ด์•„์›ƒ์„ ์—…๋ฐ์ดํŠธ ํ•ด์ฃผ๊ฒŒ๋ฉ๋‹ˆ๋‹ค.

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

 

๋Œ€์‹  ๋‘ ๊ฐ€์ง€ ๋‹ค๋ฅธ ๋ฉ”์†Œ๋“œ๋ฅผ ์ œ๊ณตํ•ด์ค๋‹ˆ๋‹ค.

 

๋งˆํ‚น์˜ ์กฐ๊ฑด

๋ ˆ์ด์•„์›ƒ์ด ๋ณ€๊ฒฝ๋˜๋Š” ์กฐ๊ฑด์€ ์œ„์— ์ ํžŒ ๊ฒƒ๊ณผ ๊ฐ™์•„์š”. 

 

setNeedsLayout

๋น„์šฉ์ด ํฐ layoutSubviews ๋Œ€์‹  ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฉ”์„œ๋“œ๊ฐ€ setNeedsLayout์ž…๋‹ˆ๋‹ค. setNeedsLayout์€ ๋‹ค์Œ ๋Œ์•„์˜ค๋Š” ์‚ฌ์ดํด์— ๋ทฐ๋ฅผ ์—…๋ฐ์ดํŠธ ํ•˜๋ผ๊ณ  ๋งˆํ‚นํ•ด๋‘๊ณ  ์ข…๋ฃŒ๋ฉ๋‹ˆ๋‹ค. 

 

์ด๋ ‡๊ฒŒ ๋งˆํ‚น๋œ ๋ทฐ๋Š” ๋‹ค์Œ ์—…๋ฐ์ดํŠธ ์‚ฌ์ดํด์—์„œ layoutSubviews์— ์˜ํ•ด ์—…๋ฐ์ดํŠธ๋ฉ๋‹ˆ๋‹ค.

 

layoutIfNeeded

ํ•˜์ง€๋งŒ ์œ„ ๋ฐฉ๋ฒ•์€ ์—ฌ์ „ํžˆ ๋‹ค์Œ ์‚ฌ์ดํด๊นŒ์ง€ ๊ธฐ๋‹ค๋ ค์•ผํ•˜๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ์–ด์š”. ๊ทธ๋ž˜์„œ ์ฆ‰๊ฐ์ ์œผ๋กœ ๋ทฐ๋ฅผ ์—…๋ฐ์ดํŠธํ•  ์ˆ˜ ์žˆ๋„๋ก layoutIfNeeded ๋ผ๋Š” ๋ฉ”์†Œ๋“œ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

 

layoutIfNeeded๋Š” ์‹คํ–‰์ด๋˜๋ฉด ๊ณง๋ฐ”๋กœ layoutSubview๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ์—…๋ฐ์ดํŠธ๊ฐ€ ๋งˆ์น˜๋ฉด ์ข…๋ฃŒ๋˜๋Š”, ๋™๊ธฐ์ ์œผ๋กœ ๋™์ž‘ํ•˜๋Š” ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ด๋ฒˆ์—๋„ ์—…๋ฐ์ดํŠธ ์‚ฌ์ดํด์„ ๊ฐ•์ œ๋กœ ์‹œ์ž‘ํ•˜๋‹ˆ ๋น„์šฉ์ด ๋น„์‹ธ๊ฒ ์ฃ .

 

๊ทธ๋ž˜์„œ ์• ํ”Œ์€ ๊ผญ ํ•„์š”ํ•œ ๊ฒฝ์šฐ๊ฐ€ ์•„๋‹ˆ๋ผ๋ฉด setNeedsLayout์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.

 

 

layoutIfNeeded๊ฐ€ ๋ฐ˜๋“œ์‹œ ํ•„์š”ํ•œ ๊ฒฝ์šฐ๋Š” ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ์ธ๋ฐ์š”, ์œ„ ๊ฐ™์€ ๊ฒฝ์šฐ์—์„œ constraint๋ฅผ ๋ฐ”๊ฟ”์ค€ ํ›„์— ๋ณ€๊ฒฝ๋œ ๋ ˆ์ด์•„์›ƒ์„ ์ ์šฉํ•˜์ง€ ์•Š๊ณ  ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ์‹คํ–‰ํ•˜๋ฉด ์• ๋‹ˆ๋ฉ”์ด์…˜์ด ๋™์ž‘ํ•˜์ง€ ์•Š๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์•„์ง ์‚ฌ์ดํด์ด ์‹œ์ž‘๋˜์ง€ ์•Š์•˜๊ฑฐ๋“ ์š”.

 

์™ผ์ชฝ: layoutIfNeeded ๋ฏธ์‚ฌ์šฉ / ์˜ค๋ฅธ์ชฝ layoutIfNeeded ์‚ฌ์šฉ

๊ทธ๋ž˜์„œ ์• ๋‹ˆ๋ฉ”์ด์…˜์ด ์‹œ์ž‘๋˜๊ธฐ ์ง์ „์— ๋ชจ๋“  ๋ ˆ์ด์•„์›ƒ์„ ๋‹ค ์ ์šฉ์‹œ์ผœ๋‘๊ณ  ์• ๋‹ˆ๋ฉ”์ด์…˜๊ณผ ํ•จ๊ป˜ ์—…๋ฐ์ดํŠธ ์‚ฌ์ดํด์„ ๋Œ๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

Display

Display๋Š” ์‚ฌ์ด์ฆˆ๋‚˜ ์œ„์น˜์™€ ์ƒ๊ด€์—†์ด ํ™”๋ฉด์— ๊ทธ๋ ค์ง€๋Š” ์š”์†Œ๋“ค์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. 

 

Draw

๊ทธ๋ฆฌ๊ณ  draw๋Š” ์ด๋Ÿฐ ์š”์†Œ๋“ค์„ ๊ทธ๋ฆฌ๋Š” ๋ฉ”์†Œ๋“œ์ž…๋‹ˆ๋‹ค. ์ด๋ฒˆ์—๋„ ์• ํ”Œ์€ ์ง์ ‘ ํ˜ธ์ถœํ•˜๋Š” ๊ฒƒ์„ ์ง€์–‘ํ•˜๋ผ๊ณ  ๋งํ•˜๋Š”๋ฐ์š”, ๋Œ€์‹  ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฉ”์†Œ๋“œ๋“ค์„ ์•Œ์•„๋ด…์‹œ๋‹ค!

 

setNeedsDisplay

์ด๋ฆ„์ฒ˜๋Ÿผ setNeedsLayout๊ณผ ๋™์ผํ•œ ๋™์ž‘์—์„œ ๋Œ€์ƒ์ด Display์ธ ๊ฒƒ๋งŒ ๋‹ค๋ฆ…๋‹ˆ๋‹ค.

DisplayIfNeeded๋Š” ์—†์–ด์š”ใ…‹ใ…‹ ๋งŒ์•ฝ ์ฆ‰๊ฐ์ ์ธ ์—…๋ฐ์ดํŠธ๊ฐ€ ํ•„์š”ํ•˜๋‹ค๋ฉด didSet๊ฐ™์€ ํ”„๋กœํผํ‹ฐ ์˜ต์ €๋ฒ„๋กœ setNeedsDisplay๋ฅผ ํ˜ธ์ถœํ•˜๊ณ  draw ๋ฉ”์„œ๋“œ๋ฅผ ์˜ค๋ฒ„๋ผ์ด๋”ฉ ํ•˜๋ผ๊ณ  https://tech.gc.com/demystifying-ios-layout/ ์ด ๊ธ€์˜ ์ €์ž๋ถ„์€ ๊ถŒํ•˜๊ณ  ์žˆ์–ด์š”.

 

Constraints

Constraints๋Š” ์˜คํ† ๋ ˆ์ด์•„์›ƒ์„ ์‚ฌ์šฉํ•˜๋Š” ๋ทฐ๋“ค์˜ ์ œ์•ฝ์กฐ๊ฑด์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

 

UpdateConstraints

UpdateConstraints ๋ฉ”์†Œ๋“œ๋Š” ๋ทฐ์˜ Constraint๋ฅผ ์—…๋ฐ์ดํŠธํ•  ๋•Œ ๋ถˆ๋ฆฌ๋Š” ๋ฉ”์†Œ๋“œ์ž…๋‹ˆ๋‹ค. ์ด๋ฒˆ์—๋„ ์—ญ์‹œ ์—…๋ฐ์ดํŠธ ์‚ฌ์ดํด์—์„œ ๋ถˆ๋ฆฌ๊ฒ ์ฃ ?

 

๋ทฐ์˜ Constraint๊ฐ€ ๋ณ€๊ฒฝ๋˜๋ฉด ๋งˆํ‚น์ด ๋˜๊ณ , ์—…๋ฐ์ดํŠธ ์‚ฌ์ดํด์—์„œ ๋งˆํ‚น๋œ ๋ทฐ๋“ค์˜ Constraint๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

 

setNeedsUpdateConstraints

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

 

updateConstraintsIfNeeded()

Constraints๋Š” ์ฆ‰์‹œ ์—…๋ฐ์ดํŠธํ•˜๋Š” ๋ฉ”์†Œ๋“œ๊ฐ€ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค! updateConstarintsIfNeeded()๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด updateConstraint๊ฐ€ ๊ณง๋ฐ”๋กœ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.

 

์ด๋•Œ ๋งŒ์•ฝ setNeedsUpdateConstraints๊ฐ€ ์˜ˆ์•ฝํ–ˆ๋˜ ์‚ฌ์ดํด ์ด์ „์— ์‹คํ–‰๋˜์—ˆ๋‹ค๋ฉด, ๋งˆํ‚น์„ ์ง€์šฐ๊ณ  ๋‹ค์Œ ์‚ฌ์ดํด์—์„œ ๋‘ ๋ฒˆ ์—…๋ฐ์ดํŠธ๋˜์ง€ ์•Š๋„๋กํ•ฉ๋‹ˆ๋‹ค.

 

invalidateIntrinsicContentSize

Constraint์—๋Š” ํŠน๋ช…ํ•œ ๋ฉ”์†Œ๋“œ๊ฐ€ ํ•˜๋‚˜ ์ถ”๊ฐ€๋˜์–ด ์žˆ๋Š”๋ฐ์š”, intrinsicSize์˜ ๋ณ€๊ฒฝ์„ ์—…๋ฐ์ดํŠธ ์‚ฌ์ดํด์— ์˜ˆ์•ฝํ•  ์ˆ˜ ์žˆ๋Š” ๋ฉ”์†Œ๋“œ์ž…๋‹ˆ๋‹ค. 

 

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

 

์ •๋ฆฌ!

์•„๋ž˜ ํ‘œ๋Š” https://tech.gc.com/demystifying-ios-layout ์ด ๊ธ€ ๋งˆ์ง€๋ง‰์— ๋‚˜์™€์žˆ๋Š” ํ‘œ๋ฅผ ๊ฐ„๋‹จํ•˜๊ฒŒ ์ •๋ฆฌํ•œ๊ฑด๋ฐ์š”, ์‹ค์ œ๋กœ ์š”์†Œ๋“ค์„ ์—…๋ฐ์ดํŠธํ•  ๋•Œ ํ˜ธ์ถœํ•˜๋Š” ๋ฉ”์†Œ๋“œ์™€, ๋งˆํ‚นํ•˜๋Š” ์‹œ์ ์— ๋Œ€ํ•œ ๋ฉ”์†Œ๋“œ๋ฅผ ์ •๋ฆฌํ•ด๋‘์—ˆ์Šต๋‹ˆ๋‹ค.

 

๋งˆ์ง€๋ง‰์œผ๋กœ ์•„๋ž˜ ๊ทธ๋ฆผ์€ ๋ทฐ์™€ ๋ทฐ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ๊ทธ๋ ค์ง€๋Š” ์‚ฌ์ดํด์„ ๊ทธ๋ ค๋ณธ ๊ฒƒ์ž…๋‹ˆ๋‹ค! https://medium.com/@Alpaca_iOSStudy/viewcontroller-view-lifecycle-daed5766e02b  ์ด ๊ธ€์—์„œ ์—„์ฒญ๋‚˜๊ฒŒ ๋ถ„์„์„ ๊ผผ๊ผผํžˆ ํ•ด์ฃผ์…”์„œ ์ด๋ฒˆ์— ๊ณต๋ถ€ํ•˜๋ฉด์„œ ๋‚˜์™”๋˜ ์ฃผ์š”ํ•œ ๋ฉ”์†Œ๋“œ๋“ค์„ ์ˆœ์„œ๋Œ€๋กœ ๋‚˜์—ดํ•ด๋ณด์•˜์Šต๋‹ˆ๋‹ค! ์‹ค์ œ๋กœ ํ™”๋ฉด์ด ๊ทธ๋ ค์งˆ ๋•Œ Constraint, Layout, Display ์ˆœ์œผ๋กœ ๊ทธ๋ ค์ง„๋‹ค๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋„ค์š”..!

์˜ค๋Š˜์˜ ๊ธ€์€ ๋Œ€๋ถ€๋ถ„ Demystifyinh iOS layout ๊ธ€์„ ์ œ๊ฐ€ ์ดํ•ดํ•œ๋Œ€๋กœ ๋‹ค์‹œ ์ •๋ฆฌํ•˜๋ฉด์„œ ์ž‘์„ฑํ–ˆ์–ด์š”. ์›๋ฌธ์ด ์ •๋ง ์ž˜ ์“ฐ์—ฌ์ ธ ์žˆ์œผ๋‹ˆ ์ฝ์–ด๋ณด์‹œ๋Š”๊ฑธ ์ถ”์ฒœ๋“œ๋ฆฝ๋‹ˆ๋‹ค!

Reference