0. ์ค๋ช ์ ํ๊น๊ธฐ
์ฐ์ ์คํ ๋ ์ด์์์ ์ฐ๋ ์ด์ ๊ฐ ๋ญ์์ฃ ?
์ ๋์ ์ธ ์ขํ๊ณ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์, ๋ง์น ์คํฌ๋ฆฐ์ ์ฌ์ด์ฆ๋ฅผ ๋ฏธ๋ฆฌ ์๊ณ ์๋ค๊ณ ๊ฐ์ ํ๊ณ ์ฐ๋ ๊ฒ์ ๋๋ค. ๊ทธ๋์ ๋ง์ฝ, ์์ดํฐ7์ ์ขํ๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ง๋ ์ฑ์ด ์์ดํฐ 11ํ๋ก ๋๋ ๋๋์ค์ผ์ดํ ๋ชจ๋์ ์์ดํจ๋์์ ์ฌ์ฉ๋๋ค๋ฉด, ๋น์ฐํ ๋งค์ฐ ์๊ฒ ๋ณด์ผ ๊ฑฐ๊ณ , ํ๋ฉด์ ๋ ์ด์์์ด ์ด์ํ๊ฒ ์กํ๊ฒ ์ฃ .
์ ๋ฐ ๋ฌธ์ ๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด, UIView์ frame์ด ๋ฐํ์ ๋์์ ๊ณ์ฐ๋๋ฉด์ ์ค์๊ฐ์ผ๋ก ์ฌ์ฉ๋๊ณ ์๋ ์คํฌ๋ฆฐ ์ฌ์ด์ฆ๋ฅผ ๊ณ ๋ คํด์ ๊ฒฐ์ ๋ ์ ์๊ฒ ํด์ฃผ๋ ๊ฒ์ด autolayout์ ๋๋ค.
๋ฌ๊ธ์์ด ์คํ ๋ ์ด์์์ด ์ ๋์ค๋๊ตฌ์?
์คํ ๋ ์ด์์์ด ๋ฐ๋ก ์ค๋ ๋ค๋ฃฐ ์ฃผ์ ์ธ Alignment Rectangle์ ๊ธฐ์ค์ผ๋ก ์๋ํ๊ธฐ ๋๋ฌธ์ ๋๋ค.
1. ๋๋์ฒด Alignment Rectangles ? ๋ ๋ฌด์์ผ๊น์? ( ์์ด ์ฃผ์, ๋ฐ๋ก ํ๊ตญ์ด ๋์ค๋๊น ๋๊ฐ์ง ๋ง์ธ์ !! )
As developers create complex views, they may introduce visual ornamentation such as shadows, exterior highlights, reflections, and engraving lines. As they do, these features are often drawn onto p_w_picpath art rather than being added through layers or subviews. Unlike frames, a view’s alignment rectangle should be limited to a core visual element. Its size should remain unaffected as new items are drawn onto the view. Consider the left side of Figure 1-11. It shows a view drawn with a shadow and a badge. When laying out this view, you want Auto Layout to focus on aligning just the core element—the blue rectangle—and not the ornamentation.
(์ถ์ฒ : blog.51cto.com/linjohn/1670691 )
์ถ๊ฐ์ ์ธ ๋น์ฅฌ์ผ์ ์ธ ์ฅ์์ด ์๋ ๋ทฐ๋ฅผ ๋ง๋ค๋ฉด frame <-> alignment rectangle์ ๋ค๋ฅด์ง ์์ต๋๋ค. ํ์ง๋ง, ๊ทธ ๋ทฐ์ ๊ทธ๋ฆผ์๋ฅผ ์ถ๊ฐํ๊ฑฐ๋, highlight๋ฅผ ์ฃผ๊ฑฐ๋, ๋ฑ์ง๋ฅผ ๋ฌ๊ฑฐ๋ ํ ๋, ๋์ ์๋ก ๋ฌ๋ผ์ง๋๋ค.
๊ทธ๋ฆผ2์ ๊ฒ์ ์ง์ฌ๊ฐํ์ผ๋ก ํ์๋ ๊ฒ ์๋ ๋ทฐ๋ผ๊ณ ํฉ์๋ค. ์ด๋, ๊ทธ๋ฆผ1์์ ๋ณด๋ฉด ์ ์ ์๋ฏ์ด ๋ทฐ์, ๊ทธ๋ฆผ์, ๋ฑ์ง๊ฐ ์ถ๊ฐ๋์ด ์๋ค์. ๊ทธ๋ ์ฃ ? ์ด๋ฌํ ๋ถ๊ฐ์ ๋น์ฅฌ์ผ ์ฅ์ ํจ๊ณผ๋ค์, layer๋ subview๋ก์ ์ถ๊ฐ๋์ง ์๊ณ , p_w_picpath art๋ก์ ์ถ๊ฐ๋ฉ๋๋ค. ์ฆ, alignment rectangle์ frame rectangle๊ณผ ๋ฌ๋ฆฌ, ์ด ๋ทฐ์ ์๋์ ์์น ๋ฐ ์ฌ์ด์ฆ๋ฅผ ์ก๋ ์คํ ๋ ์ด์์์ ์ฐ์ด๊ธฐ ๋๋ฌธ์, ๊ทธ ๋ทฐ์ ํต์ฌ ์๊ฐ ์์์๋ง ์ง์คํ ํ์๊ฐ ์์ต๋๋ค. ๊ทธ๋์ ๊ทธ๋ฆผ3 ์ ์์ญ์ด frame rect. ๋ผ๊ณ ํ๋ฉด, ๊ทธ๋ฆผ2์ ์์ญ์ด ๋ฐ๋ก ์ค๋ ๋ค๋ฃจ๋ alignment rect.์ด ๋๊ฒ ์ต๋๋ค(๋ฌผ๋ก ์ขํ์ ์ฌ์ด์ฆ๋ฅผ ๊ฐ์ก๊ฒ ์ฃ ).
์คํ ๋ ์ด์์์ ๋ทฐ์ ์์น์ ์ฌ์ด์ฆ ๊ธฐ์ค์ ๋ฐ๋ก ์ด alignment rect.๋ก ์ก๊ณ ์งํ๋ฉ๋๋ค. ๊ทธ๋ฌ๋๊น, ์๊พธ, " ๋๋ถ๋ถ์ ๊ฒฝ์ฐ, ์ฆ, ๋ถ๊ฐ์ ์๊ฐ ์ฅ์์ด ์๋ ๊ฒฝ์ฐ, ๋๋ถ๋ถ์ ๊ฒฝ์ฐ frame rect.์ alignment rect.๋ ์ผ์นํ๋ค"๋ผ๊ณ ๋ค ํ๋ ๊ฒ์ด์ฃ .
2. Alignment Rectangle์ ์ฃผ์ ์์ฑ๋ค
Alignment Rectangle์ ๊ฒฐ์ ์ ์ธ ๋ ์ด์์ ์์ฑ๋ค
์ฌ๊ธฐ์ ๋ถํด, ๊ทธ ์ ํฌ๊ฐ ์คํ ๋ ์ด์์ ์ค์ ํ ๋ ๋์ค๋ GUI์ ๋์ค๋ ๋ด์ฉ๊ณผ ์ผ์นํฉ๋๋ค. ๋ค๋ง, ์ด ๊ธฐ์ค์ด ๋ญ๋ค? ๋ฐ๋ก Alignment Rectangle์ ๊ธฐ์ค์ผ๋ก ๊ฐํด์ง๋ ๊ธฐ์ค์ด๋ค๋ฅผ ๊ธฐ์ตํด์ฃผ์ธ์ !!
1. width, height
์ฌ์ด์ฆ๋ฅผ ๊ฒฐ์ ํฉ๋๋ค. ๋๋ฌด ๋น์ฐํ์ฃ .
2. top, bottom, left, right
ํด๋น UIView์ alignment์ top, bottom, left, right ๋ฐฉํฅ ๋ชจ์๋ฆฌ์, ๋ค๋ฅธ UIView์ alignment rectangle top, bottom, left, right ๋ชจ์๋ฆฌ ์ฌ์ด์ ๊ฐ๊ฒฉ์ ๊ฒฐ์ ํฉ๋๋ค.
3. centerX, centerY
ํด๋น UIView alignment rectangle์ ์ค์์ ๊ฒฐ์ ํฉ๋๋ค. x์ถ์์์ ์ค์ ์ขํ์ y์ถ์์์ ์ค์ ์ขํ์.
4. FirstBaseline, LastBaseline
๋ณดํต UIView์์, bottom๊ณผ ๋์ผํ ์์ฑ์ด๋, UITextField(UIView), Multiline Text Label, Text View์ ๊ฐ์ด ํ ์คํธ ์ ๋ ฅ์ด ๋ค์ด๊ฐ๋ UIView์ค ์ผ๋ถ์ ๋ํด์๋, FirstBaseline, LastBaseline์ alignment rectangle์ bottom์ด ์๋, ๊ทธ๊ฒ์ด ๋ณด์ฌ์ฃผ๋ ํ ์คํธ์ ์ต๊ณ ๋ฐ๋ถ๋ถ์ ๋งํฉ๋๋ค. ์ด๋ฅผ ํตํด์, alignment rectangle์์ ๋ฒ์ด๋ ์ ์๋ g, p์ ๊ฐ์ descender( a,b,c,d,e,f,g,p๋ฅผ ๋ณด์๋ฉด ์์๊ฒ ์ฃ . g,p์ ๊ธ์์ ์ผ๋ถ๋ ๋ ๋ฐ๋ถ๋ถ ๊น์ง ๊ฑธ์ณ์๋ ๊ฒ? ์ด๋ฐ ๊ธ์๋ค์ descender๋ผ๊ณ ๋ถ๋ฆ ๋๋ค. ) ๊น์ง ํฌ๊ดํ ์ต๊ณ ๋ฐ๋ถ๋ถ์ ๊ธฐ์ค์ผ๋ก ์ฐ์ ๋ ์ ์์ต๋๋ค.
๊ทธ๋ผ ๋ญ๊ฐ ์ข์ฃ ? ์ ์ด๋ ๊ฒ ๊น์ง ํ๋ ๊ฑธ๊น์? ์ง์ง ...
๊ทธ๋ผ ๋ฐ๋๋ก ๋ฌป๊ฒ ์ต๋๋ค. ๋ง์ฝ alignment rectangle๊ธฐ์ค์ผ๋ก ๋ ์ด์์์ ์ค์ ํ๊ณ , ๋ฐ์ ๋งค์ฐ ๋ผ๋ฒจ์ด ์์๋๋ฐ p, g์ ๋ฐ์ผ๋ก ๋ ๋ด๋ ค๊ฐ ๋ถ๋ถ์ด ๊ฒน์น๋ฉด ์ด๋ป๊ฒ ํ ๊ฒ๋๊น? ์ฑ์ด ๋งค์ฐ ์์ด ๋ณด์ผ ํ ๋ฐ์ !!
๊ทธ๋์ ๋ง์ฝ text view, multiline textlabel, UITextField์ ๊ฐ์ UIView์ Bottom๊ณผ ๋ค๋ฅธ UIView๋ฅผ ๋ค๋ฃฌ๋ค๋ฉด ๊ฐ๊ฒฉ์ ๋ญ ๊ธฐ์ค์ผ๋ก ์ ํด์ผ๋๊ฒ์?
๋ฐ๋ก ์ด alignment rectangle์ baseline ์์ฑ์ ๋๋ค.
5. Leading, Trailing
left, right์ ๋๋ถ๋ถ ๊ฐ์ผ๋, ์ฌ์ฉ ์ธ์ด์ ๋ํ ๋ ์ธ๋ฐํ ์กฐ์ ์ด ๋์ด์๋ ์์ฑ์ ๋๋ค. ๋ง์ฝ, ์ผ์ชฝ์์ ์ค๋ฅธ์ชฝ์ผ๋ก ์ฝ๋ ์ธ์ด์ ๊ฒฝ์ฐ( ์์ด, ํ๊ตญ์ด, ์ค๊ตญ์ด ๋ฑ ๋๋ถ๋ถ ) leading์ด left, trailing์ด right์ ๊ฐ์ต๋๋ค. ๋ง์ฝ ์๋์ด?!์ ๊ฐ์ด ์ค๋ฅธ์ชฝ์์ ์ผ์ชฝ์์ ์ฝํ๋ ์ธ์ด์ ๊ฒฝ์ฐ, leading์ด right์ ๊ฐ๊ณ , trailing์ด left์ ๊ฐ์ต๋๋ค.
3. Outro
์ ๋ frame๋ ๊ฒจ์ฐ ๋ญ์ง ๊ฐ์ ์ตํ๊ฐ๋ ๋ฐ,
alignment rectangle์ด ๋์ค์ ๋ง์, ๋ ๋ญ์ง? ๋ญ ์ด๋ฆฌ ์๊ฒ ๋ง์? ๋ผ๋ ์ง์ฆ์ด ๋ฌ์ต๋๋ค๋ง,
๋ ์ด๋์ ๋ ๋ฐฐ์ฐ๊ณ ๋๋, ๋ณ๋ก ๋ค๋ฅด์ง๋ ์๊ณ , ์ข ๊ธฐ๋ถ์ด ๋์์ก์ต๋๋ค. ์ฌ์ ํ, ์ ๊ฐ ์๋ชป ์ดํดํ ๊ฒ ์์ ์ ์์ผ๋ ๋๊ธ์ ๋จ๊ฒจ์ฃผ์ธ์.