๋ค์์ ์ ํ ๊ณต์ ํํ์ด์ง์์ ์ธ๊ธํ ๊ฒ์ด๋ค.
iPhone ๋ฐ iPad์ฉ ์ ์ํ ์ฌ์ฉ์ ์ธํฐํ์ด์ค ๊ตฌ์ถ
์ฑ์ ๋์คํ๋ ์ด ํฌ๊ธฐ ๋๋ ์ข ํก๋น์ ์๊ด์์ด ๋ชจ๋ iPhone ๋ฐ iPad ๋ชจ๋ธ์์ ๊ทผ์ฌํ๊ฒ ๋ณด์ฌ์ผ ํฉ๋๋ค. Xcode storyboard ๋ฐ Auto Layout๊ณผ ๊ฐ์ ๊ธฐ๋ฅ์ ์ฌ์ฉํ ๊ฒฝ์ฐ, ์ฑ์ ์ธํฐํ์ด์ค ์์์ ๋ ์ด์์์ด ์๋์ผ๋ก ํ๋ฉด์ ๋ง์ถฐ์ง๋๋ค. WWDC19์์ ๊ณต์งํ ๋ฐ์ ๊ฐ์ด, 2020๋ 4์๋ถํฐ App Store์ ์ ์ถ๋๋ ๋ชจ๋ ์ฑ์ Xcode storyboard๋ฅผ ์ฌ์ฉํ์ฌ ์ฑ์ ์คํ ํ๋ฉด์ ์ ๊ณตํด์ผ ํ๋ฉฐ, ๋ชจ๋ ๋์คํ๋ ์ด ํฌ๊ธฐ๋ฅผ ์ง์ํ๋ ์ธํฐํ์ด์ค๋ฅผ ๊ฐ์ง๊ณ ์์ด์ผ ํฉ๋๋ค.
์ด์ฒ๋ผ ์ฑ์ ๋ง๋ค ๋, ์ด๋ ๋๋ฐ์ด์ค์์ ๋ณด๋ ๋์ผํ ํ๋ฉด์ด ์ ์ฉ๋๊ฒ ๋์์ธํด์ผํ๋ค.
์คํ ๋ ์ด์์์ Visual Design์ ๊ด๋ จ๋ ๋ด์ฉ์ Appleํด๋ -> HIGํด๋ -> Adaptivity and Layout.md์ ์ฌ๋ฆฌ๋๋ก ํ๊ฒ ๋ค. ์ถํ ์
๋ฐ์ดํธ ์์ . ์ด ๊ณณ์์๋ ๋์์ธ์ ์์๋ ์ดํด๋ณด์ง ์๊ฒ ๋ค.
์คํ ๋ ์ด์์(Auto Layout)์ด๋, ์ ์ฝ์กฐ๊ฑด(Constraints)์ ๋ฐ๋ผ ๋ทฐ ๊ณ์ธต ๊ตฌ์กฐ์ ์๋ ๋ชจ๋ ๋ทฐ์ ์์น์ ํฌ๊ธฐ๋ฅผ ๋์ ์ผ๋ก ์ง์ ํ๋ ๊ฒ์ด๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ๋์คํ๋ ์ด์ ํฌ๊ธฐ์ ๊ด๊ณ์์ด ๋์ผํ ๋ ์ด์์์ ๊ตฌํํ ์ ์๋ค.
์คํ ๋ ์ด์์์ด ์๋ ์๊ธฐ ์์ ์ ์ขํ๊ณ ๊ธฐ๋ฐ์ธ Bounds๋ ์์ ์์๋ถํฐ ๊ฑฐ๋ฆฌ์ ํฌ๊ธฐ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ Frame-Based 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/
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)
๋ฌธ์ ๋ฐ์์ ํด๊ฒฐ๋ฒ์ ์๋ต
์คํ ๋ ์ด์์ ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ค ๋ณด๋ฉด ๊ฐ์ฒด๊ฐ ๋ช ๊ฐ ์๋ ๊ฐ๋จํ ๋ ์ด์์์ ์ฝ๊ฒ ์ค์ ํ ์ ์์ง๋ง, ๊ฐ์ฒด๊ฐ ๋ง์ ๋ ์ด์์์ ์ด๋ ต๊ณ ๋ณต์กํ๋ค. ์ด๋ค ๊ฐ์ฒด๋ฅผ ๋ง์ถ๋ฉด ๋ค๋ฅธ ํ๋๊ฐ ํ์ด์ง๊ณ , ๋๋ฐ์ด์ค๋ฅผ ๋ณ๊ฒฝํ๋ฉด ์ด์ํด์ง๊ธฐ๋ ํ๋ค.
์ด๋ด ๋ ์ฝ๊ฒ ์ฌ์ฉํ ์ ์๋ ๊ฐ์ฒด๊ฐ ๋ฐ๋ก ์คํ ๋ทฐ(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






