Skip to content

Latest commit

ย 

History

History
121 lines (63 loc) ยท 7.78 KB

File metadata and controls

121 lines (63 loc) ยท 7.78 KB

์˜คํ†  ๋ ˆ์ด์•„์›ƒ(Auto Layout)

๋‹ค์Œ์€ ์• ํ”Œ ๊ณต์‹ ํ™ˆํŽ˜์ด์ง€์—์„œ ์–ธ๊ธ‰ํ•œ ๊ฒƒ์ด๋‹ค.

iPhone ๋ฐ iPad์šฉ ์ ์‘ํ˜• ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค ๊ตฌ์ถ•

์•ฑ์€ ๋””์Šคํ”Œ๋ ˆ์ด ํฌ๊ธฐ ๋˜๋Š” ์ข…ํšก๋น„์— ์ƒ๊ด€์—†์ด ๋ชจ๋“  iPhone ๋ฐ iPad ๋ชจ๋ธ์—์„œ ๊ทผ์‚ฌํ•˜๊ฒŒ ๋ณด์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค. Xcode storyboard ๋ฐ Auto Layout๊ณผ ๊ฐ™์€ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ, ์•ฑ์˜ ์ธํ„ฐํŽ˜์ด์Šค ์š”์†Œ์™€ ๋ ˆ์ด์•„์›ƒ์ด ์ž๋™์œผ๋กœ ํ™”๋ฉด์— ๋งž์ถฐ์ง‘๋‹ˆ๋‹ค. WWDC19์—์„œ ๊ณต์ง€ํ•œ ๋ฐ”์™€ ๊ฐ™์ด, 2020๋…„ 4์›”๋ถ€ํ„ฐ App Store์— ์ œ์ถœ๋˜๋Š” ๋ชจ๋“  ์•ฑ์€ Xcode storyboard๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์•ฑ์˜ ์‹คํ–‰ ํ™”๋ฉด์„ ์ œ๊ณตํ•ด์•ผ ํ•˜๋ฉฐ, ๋ชจ๋“  ๋””์Šคํ”Œ๋ ˆ์ด ํฌ๊ธฐ๋ฅผ ์ง€์›ํ•˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ด์ฒ˜๋Ÿผ ์•ฑ์„ ๋งŒ๋“ค ๋•Œ, ์–ด๋А ๋””๋ฐ”์ด์Šค์—์„œ ๋ณด๋“  ๋™์ผํ•œ ํ™”๋ฉด์ด ์ ์šฉ๋˜๊ฒŒ ๋””์ž์ธํ•ด์•ผํ•œ๋‹ค.

์˜คํ†  ๋ ˆ์ด์•„์›ƒ์˜ Visual Design์— ๊ด€๋ จ๋œ ๋‚ด์šฉ์€ Appleํด๋” -> HIGํด๋” -> Adaptivity and Layout.md์— ์˜ฌ๋ฆฌ๋„๋ก ํ•˜๊ฒ ๋‹ค. ์ถ”ํ›„ ์—…๋ฐ์ดํŠธ ์˜ˆ์ •. ์ด ๊ณณ์—์„œ๋Š” ๋””์ž์ธ์  ์š”์†Œ๋Š” ์‚ดํŽด๋ณด์ง€ ์•Š๊ฒ ๋‹ค.


1. ์˜คํ†  ๋ ˆ์ด์•„์›ƒ(Auto Layout)์ด๋ž€?

์˜คํ†  ๋ ˆ์ด์•„์›ƒ(Auto Layout)์ด๋ž€, ์ œ์•ฝ์กฐ๊ฑด(Constraints)์— ๋”ฐ๋ผ ๋ทฐ ๊ณ„์ธต ๊ตฌ์กฐ์— ์žˆ๋Š” ๋ชจ๋“  ๋ทฐ์˜ ์œ„์น˜์™€ ํฌ๊ธฐ๋ฅผ ๋™์ ์œผ๋กœ ์ง€์ •ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ๋””์Šคํ”Œ๋ ˆ์ด์˜ ํฌ๊ธฐ์™€ ๊ด€๊ณ„์—†์ด ๋™์ผํ•œ ๋ ˆ์ด์•„์›ƒ์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

์˜คํ†  ๋ ˆ์ด์•„์›ƒ์ด ์•„๋‹Œ ์ž๊ธฐ ์ž์‹ ์˜ ์ขŒํ‘œ๊ณ„ ๊ธฐ๋ฐ˜์ธ Bounds๋‚˜ ์›์ ์—์„œ๋ถ€ํ„ฐ ๊ฑฐ๋ฆฌ์™€ ํฌ๊ธฐ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•œ Frame-Based Layout๋กœ ํ™”๋ฉด์„ ๊ตฌ์„ฑํ•  ์‹œ ํ˜„์žฌ ํ™”๋ฉด์˜ ํฌ๊ธฐ๊ฐ€ ์–ด๋–ป๋“  ๊ฐ„์— ํ•ด์ƒ๋„๊ฐ€ ๋‹ค๋ฅธ ํ™”๋ฉด์—์„œ๋Š” ์—ฌ๋ฐฑ์ด ๋‚จ๊ฑฐ๋‚˜, ๋ฐ˜๋Œ€๋กœ ํ™”๋ฉด์ด ์ž˜๋ฆฌ๊ฒŒ ๋œ๋‹ค.

๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ์šฐ๋ฆฌ๋Š” ์˜คํ†  ๋ ˆ์ด์•„์›ƒ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•ด์„œ ๋””๋ฐ”์ด์Šค๊ฐ€ ๋ฐ”๋€Œ์–ด๋„ ์ƒํ•˜์ขŒ์šฐ ์—ฌ๋ฐฑ์ด ์•Œ๋งž๊ฒŒ ์„ค์ •๋˜๋„๋ก ํ•ด์•ผํ•œ๋‹ค.


2. ์˜คํ†  ๋ ˆ์ด์•„์›ƒ(Auto Layout) ์„ค์ •ํ•˜๊ธฐ

์˜คํ†  ๋ ˆ์ด์•„์›ƒ์€ ๊ฐ ๊ฐ์ฒด๋งˆ๋‹ค ์ œ์•ฝ ์กฐ๊ฑด(constraints)์„ ์„ค์ •ํ•˜์—ฌ ์‚ฌ์šฉํ•œ๋‹ค. ์ œ์•ฝ ์กฐ๊ฑด์ด๋ž€ ๊ฐ ๊ฐ์ฒด๊ฐ€ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š” ์—ฌ๋ฐฑ, ์ •๋ ฌ ๋ฐฉ๋ฒ•, ๋‹ค๋ฅธ ๊ฐ์ฒด์™€์˜ ๊ฐ„๊ฒฉ ๋“ฑ์„ ์˜๋ฏธํ•˜๋ฉฐ ์ œ์•ฝ ์กฐ๊ฑด์€ ์Šคํ† ๋ฆฌ๋ณด๋“œ ํ•˜๋‹จ์˜ ์ •๋ ฌ ์กฐ๊ฑด(Align) ์•„์ด์ฝ˜ ๋ฐ ์ œ์•ฝ ์กฐ๊ฑด(Pin) ์•„์ด์ฝ˜์„ ํด๋ฆญํ•˜์—ฌ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

์ •๋ ฌ ์กฐ๊ฑด(Align)

์ œ์•ฝ ์กฐ๊ฑด(Pin)

์„ค์ •ํ•œ ์ œ์•ฝ ์กฐ๊ฑด์€ ๋„ํ๋จผํŠธ ์•„์›ƒ๋ผ์ธ ์˜์—ญ ๋˜๋Š” ์˜ค๋ฅธ์ชฝ ์ธ์ŠคํŽ™ํ„ฐ ์˜์—ญ์˜ ์‚ผ๊ฐ์ž๋ชจ์–‘ ์•„์ด์ฝ˜ 'Size Inspector' ๋ฒ„ํŠผ์„ ํด๋ฆญํ•œ ํ›„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

Top, Bottom์€ ์œ„์ชฝ, ์•„๋ž˜์ชฝ์˜ ์ œ์•ฝ์„ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. Left, Right ๋˜ํ•œ ์™ผ์ชฝ, ์˜ค๋ฅธ์ชฝ ์ œ์•ฝ์„ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ์‹ค์ œ ๋งˆ์ง„์„ ์„ค์ •ํ•  ๋•Œ Left / Right ๋Œ€์‹  Leading / Trailing์„ ์™ผ์ชฝ ์˜ค๋ฅธ์ชฝ์ฒ˜๋Ÿผ ์ž์ฃผ ์‚ฌ์šฉํ•œ๋‹ค. ์—ฌ๊ธฐ์„œ Leading์€ Text๊ฐ€ ์‹œ์ž‘๋˜๋Š” ์ง€์ , Trailing์€ Text๊ฐ€ ๋๋‚˜๋Š” ์ง€์ ์„ ์˜๋ฏธํ•œ๋‹ค.

์™œ์ผ๊นŒ?

์šฐ๋ฆฌ๊ฐ€ ํ”ํžˆ ์‚ฌ์šฉํ•˜๋Š” ํ•œ๊ธ€์ด๋‚˜ ์˜์–ด๋กœ ๊ธ€์„ ์“ธ ๋•Œ ์™ผ์ชฝ์—์„œ ์˜ค๋ฅธ์ชฝ ๋ฐฉํ–ฅ์œผ๋กœ ์“ฐ๊ธฐ ๋•Œ๋ฌธ์— Leading์ด ์™ผ์ชฝ, Trailing์ด ์˜ค๋ฅธ์ชฝ์ด ๋˜์ง€๋งŒ ์•„๋ž๊ถŒ์—์„œ๋Š” ์˜ค๋ฅธ์ชฝ์—์„œ ์™ผ์ชฝ ๋ฐฉํ–ฅ์„ ์“ฐ๊ธฐ ๋•Œ๋ฌธ์— Leading์ด ์™ผ์ชฝ, Trailing์ด ์˜ค๋ฅธ์ชฝ์ด ๋˜์–ด๋ฒ„๋ฆฐ๋‹ค.

WWDC 2015์—์„œ ์˜ค๋ฅธ์ชฝ / ์™ผ์ชฝ์„ ํŠน์ •์ ์œผ๋กœ ๊ณ ์ •ํ•ด์•ผ ํ•˜๋Š” ์‚ฌํ•ญ์ด ์•„๋‹ˆ๋ฉด, Leading๊ณผ Trailing์„ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค๊ณ  ํ•œ๋‹ค๊ณ  ์–ธ๊ธ‰ํ•œ ๋ฐ” ์žˆ๋‹ค. https://developer.apple.com/videos/play/wwdc2015/218/


3. Safe Area๋ž€?

Xcode์˜ ๋ฏธ๋ฆฌ๋ณด๊ธฐ ๊ธฐ๋Šฅ์œผ๋กœ ์˜คํ†  ๋ ˆ์ด์•„์›ƒ์ด ์ •์ƒ์ ์œผ๋กœ ์„ค์ •๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•ด๋ณผ ์ˆ˜ ์žˆ๋‹ค. ๋ณด์กฐ ํŽธ์ง‘๊ธฐ ์˜์—ญ์„ ์—ฐ ํ›„ 'Adjust Editor Options' ๋ฒ„ํŠผ์„ ํด๋ฆญํ•œ ํ›„ 'Preview' ๋ฉ”๋‰ด๋ฅผ ์„ ํƒํ•œ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ๋ฏธ๋ฆฌ๋ณด๊ธฐ ๊ฒฐ๊ณผ์—์„œ ํ™”๋ฉด ํฌ๊ธฐ๊ฐ€ ๋‹ค๋ฅธ ๋””๋ฐ”์ด์Šค์˜ ์œ„, ์•„๋ž˜ ์—ฌ๋ฐฑ์ด ๋‹ค๋ฅด๊ฒŒ ๋‚˜ํƒ€๋‚˜๋Š” ๊ฒฝ์šฐ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ๋Š”๋ฐ ์ด๋Š” ๋””๋ฐ”์ด์Šค๋ผ๋ฆฌ Safe Area๋ผ๋Š” ์˜์—ญ์ด ์„œ๋กœ ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ๋ฐœ์ƒํ•œ ๋ฌธ์ œ์ด๋‹ค.

Safe Area๋Š” ๋…ธ์น˜๊ฐ€ ์ ์šฉ๋œ iOS 11 ๊ธฐ๋ฐ˜์˜ ์•„์ดํฐx ์‹œ๋ฆฌ์ฆˆ๋ถ€ํ„ฐ ๋งŒ๋“ค์–ด์กŒ๋‹ค. ์ด์ „์—๋Š” ํšŒ์ „ํ–ˆ์„ ์‹œ Top๊ณผ Bottom๋งŒ ์ฒดํฌํ•˜๋ฉด ๋์ง€๋งŒ, ๋…ธ์น˜๊ฐ€ ์ƒ๊ธด ํ›„๋กœ๋Š” Leading๊ณผ Trailing์— ๋Œ€ํ•œ ๋งˆ์ง„๋„ ํ•„์š”ํ•˜๊ฒŒ ๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— Safe Area๊ฐ€ ๋“ฑ์žฅํ•˜๊ฒŒ ๋œ ๊ฒƒ์ด๋‹ค.

์ด์ฒ˜๋Ÿผ ์‹œ์Šคํ…œ์— ์˜ํ•ด ๊ฐ€๋ ค์งˆ ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„์˜ ๋งˆ์ง„์„ ์ž์ฒด์ ์œผ๋กœ ๊ฐ€์ง€๋Š” ๊ฒƒ์ด Safe Area์ด๋‹ค.

iPhone 8 vs iPhone X safe area (Portrait Orientation)

iPhone 8 vs iPhone X safe area (Landscape Orientation)

๋ฌธ์ œ ๋ฐœ์ƒ์‹œ ํ•ด๊ฒฐ๋ฒ•์€ ์ƒ๋žต


4. ์Šคํƒ ๋ทฐ(Stack View)๋ž€?

์˜คํ†  ๋ ˆ์ด์•„์›ƒ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๋‹ค ๋ณด๋ฉด ๊ฐ์ฒด๊ฐ€ ๋ช‡ ๊ฐœ ์—†๋Š” ๊ฐ„๋‹จํ•œ ๋ ˆ์ด์•„์›ƒ์€ ์‰ฝ๊ฒŒ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ๊ฐ์ฒด๊ฐ€ ๋งŽ์€ ๋ ˆ์ด์•„์›ƒ์€ ์–ด๋ ต๊ณ  ๋ณต์žกํ•˜๋‹ค. ์–ด๋–ค ๊ฐ์ฒด๋ฅผ ๋งž์ถ”๋ฉด ๋‹ค๋ฅธ ํ•˜๋‚˜๊ฐ€ ํ‹€์–ด์ง€๊ณ , ๋””๋ฐ”์ด์Šค๋ฅผ ๋ณ€๊ฒฝํ•˜๋ฉด ์ด์ƒํ•ด์ง€๊ธฐ๋„ ํ•œ๋‹ค.

์ด๋Ÿด ๋•Œ ์‰ฝ๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ์ฒด๊ฐ€ ๋ฐ”๋กœ ์Šคํƒ ๋ทฐ(Stack View)์ด๋‹ค. ์Šคํƒ ๋ทฐ๋Š” ๊ฐ์ฒด๋ฅผ ๋ชจ์•„์„œ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ๋ทฐ ์ปจํ…Œ์ด๋„ˆ๋กœ, ๋ณ„๋‹ค๋ฅธ ์ œ์•ฝ ์กฐ๊ฑด์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•„๋„ ๋‚ด๋ถ€ ๊ฐ์ฒด๋“ค์„ ์›ํ•˜๋Š” ๋ชจ์–‘์œผ๋กœ ์ •๋ ฌํ•  ์ˆ˜ ์žˆ๋‹ค.

์Šคํƒ ๋ทฐ๋Š” ๋‹ค๋ฅธ ๊ฐ์ฒด๋“ค๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ(Library)์—์„œ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์œผ๋ฉฐ, Horizontal Stack View(์„ธ๋กœํ˜•)์™€ Vertical Stack View(๊ฐ€๋กœํ˜•)๊ฐ€ ์žˆ๋‹ค.

์Šคํƒ ๋ทฐ๋ผ๋ฆฌ ์ค‘์ฒฉํ•ด์„œ ํ‘œ ๋ชจ์–‘์˜ ๋ ˆ์ด์•„์›ƒ๋„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.

์˜ˆ์‹œ

๊ฐ„๋‹จํ•œ ์Šคํƒ ๋ทฐ๋ฅผ ๋งŒ๋“ค์–ด๋ณด์ž.

๊ฐ€๋กœํ˜• ์Šคํƒ ๋ทฐ๋ฅผ 1๊ฐœ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ label, image view, and button์„ ๋ฐฐ์น˜ํ•œ๋‹ค.

์Šคํƒ ๋ทฐ ์•ˆ์˜ ๋ทฐ ๊ฐ„ ๊ฐ„๊ฒฉ์„ ์ฃผ๊ณ  ์‹ถ์„ ๋• Spacing์— ๊ฐ’์„ ๋„ฃ์–ด์ฃผ๋ฉด ๋œ๋‹ค. ๊ทธ ์™ธ์— Alignment์™€ Distribution, Axis, Value ๋“ฑ๋„ ์„ค์ •ํ•ด์ค€๋‹ค.

์ฝ”๋“œ๋กœ ๋ณด๋ฉด ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

1. Stack View.Leading = Superview.LeadingMargin
2. Stack View.Trailing = Superview.TrailingMargin
3. Stack View.Top = Top Layout Guide.Bottom + Standard
4. Bottom Layout Guide.Top = Stack View.Bottom + Standard


์ฐธ๊ณ  ์ž๋ฃŒ

Understanding Auto Layout

iOS Safe Area

[iOS] ์˜คํ† ๋ ˆ์ด์•„์›ƒ(AutoLayout)๊ณผ Layout ๊ฐœ๋…

๋„์„œ : The ์นœ์ ˆํ•œ Swift ํ”„๋กœ๊ทธ๋ž˜๋ฐ Zero(V 4.0)