stack view๋ autolayout์ ์ ์ฉํ์ง ์๊ณ ๋ layout์ ์ก์ ์ ์๋ ์ ๊ธฐํ ์น๊ตฌ๋ค. ํ๋ฒ ์์๋ณด์. ์ด ๊ธ์ ์ฝ๊ธฐ ์ํด์๋ ์ด์ ๊ธ์ ์ฝ๊ณ ์ค๋ ๊ฒ์ด ์ดํด๊ฐ ์ฝ๋ค.
Concept
์ ํ์์๋ ์ด stackview๋ฅผ constraint๊ฐ ๋ณต์กํ๊ฒ ์๋ autolayout์ ์ฝ๊ฒ ์ ๊ณตํ๊ธฐ ์ํด ๋ง๋ค์๋ค๊ณ ํ๋ค. stackviewํ๋๋ row๋ column ํ๋๋ฅผ ์ ์ํ๊ณ , ์ฌ์ ์ ๋ง๋ค์ด๋ properties๋ค์ ํตํด ์ด๋ฅผ ์ ์ดํ๋ค๊ณ ํ๋ค.
- axis(UIStackView): vertical ์ด๋ horizontal์ด๋
- orientation(NSStackView): vertical ์ด๋ horizontal์ด๋
- distribution: axis๋ฅผ ๋ฐ๋ผ view๋ค์ด ์ด๋ป๊ฒ(ํฌ๊ธฐ๊ฐ) ๋ถ๋ฐฐ๋ ์ง๋ฅผ ์ ํจ
- alignment: axis์ ์์ง์ธ ๋ฐฉํฅ์ผ๋ก ์ด๋ป๊ฒ ๋ถ๋ฐฐ๋ ์ง๋ฅผ ์ ํจ
- spacing: ์ธ์ ํ View๋ค ์ฌ์ด์ ๊ฐ๊ฒฉ์ ์ ์
์ด ๊ทธ๋ฆผ์ UIKit์์ ๊ฐ์ ธ์จ ๊ฑด๋ฐ, ์ property๋ฅผ ์ด ๊ทธ๋ฆผ์ ๋ณด๋ฉด์ ์ดํดํด๋ณด๋๋ก ํ์.
๋จผ์ ๊ทธ๋ฆผ์ ๋์จ stackview๋ horizontal stackview์ธ๋ฐ, ์ด๋ด ๊ฒฝ์ฐ ์ผ๋จ axis๋ horizontal์ผ ๊ฒ์ด๋ค.(UIStackView ๊ธฐ์ค์ผ๋ก ์ค๋ช ) ๊ทธ๋ฆฌ๊ณ distribution์ ์ ์๋ฅผ ๋ณด๋ axis๋ฅผ ๋ฐ๋ผ ๋ฐฐ์น๋๋ ๋ฐฉ๋ฒ์ ์ ์ํ๋ ๊ฒ์ด๋ฏ๋ก, ๊ฐ๋ก์ถ์ ์ ๋ ฌ ๋ฐฉ๋ฒ์ ์ ํ๋ ๊ฒ์ผ๋ก ๋ณด์ธ๋ค. ๋ฐ๋๋ก alignment์ ๊ฒฝ์ฐ axis์ ์์ง ๋ฐฉํฅ ๋ฐฐ์น ๋ฐฉ๋ฒ์ด๋ฏ๋ก ์ธ๋ก์ถ์ ์ ๋ ฌ ๋ฐฉ๋ฒ์ ์ ํ๋ ๊ฒ์ด๋ค.
์๋ฆฌ๊ฐ stackview ๋ฐ๊นฅ์ ํฌ๊ธฐ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ด๋ถ ์์๋ค์ ์ ๋ ฌํ๊ธฐ ๋๋ฌธ์, stackview์ ์์น์ ํฌ๊ธฐ๋ฅผ ์ง์ ํด์ฃผ์ด์ผ ํ๋ค.
Axis
- horizontal: ์์๊ฐ ์ผ์ชฝ๋ถํฐ ๋ค์ด๊ฐ
- vertical: ์์๊ฐ ์๋ถํฐ ๋ค์ด๊ฐ
๊ธฐ๋ณธ์ ์ผ๋ก ์์๊ฐ ๋ค์ด๊ฐ ๋, stackView์ ๊ฐ์ฅ ๋๋ฉด (edge๋ผ ํํ๋์ด ์์)๊ณผ ์์์ ๋๋ฉด์ด ๋ง๋ฟ๊ฒ ๋ค์ด๊ฐ๋ค๊ณ ํ๋ค. ์ฆ, horizontal์ธ ๊ฒฝ์ฐ ์ฒซ๋ฒ์งธ ์์์ ์ผ์ชฝ edge๊ฐ stackview์ ์ผ์ชฝ edge์ ๋ง๋ฟ๊ณ , vertical์ธ ๊ฒฝ์ฐ ์ฒซ๋ฒ์งธ ์์์ top edge๊ฐ stackview์ top edge์ ๋ง๋ฟ๋๋ค๋ ๋ง์ด๋ค. ๋ง์ง๋ง ์์๋ ์ ์ถํ ์ ์์ผ๋ ์๋ตํ๊ฒ ๋ค.
๊ทธ๋ฐ๋ฐ ์ด ๋, edge์์ margin์ ์ฃผ๋ฉด์ ์์๋ฅผ ๋ฃ๋ ๋ฐฉ๋ฒ์ด ์๋ค๊ณ ํ๋ค. isLayoutMarginsRelativeArrangement
๋ผ๋ ํ๋กํผํฐ์ด๋ค.
์ด๋ฐ์์ผ๋ก ์ฃผ๋ฉด, stackview์ leading edge๊ฐ 20, trailing edge๊ฐ 20 ๋์ด์ง ์ํ๋ก ๋ฐฐ์น๋๋ค.
Distribution
ํด๋น property๋ ๊ฒฐ๊ตญ ์์์ ์ถ ๊ธฐ์ค ํฌ๊ธฐ๋ฅผ ์ด๋ป๊ฒ ์ค์ ํ๊ฒ ๋๋ ๋ง์ด๋ค.
horizontal stackview๋ฅผ ๋ง๋ค๊ณ , ํฌ๊ธฐ์ ์์น๋ฅผ ๊ฒฐ์ ํ๋ค. ๋ง์ฝ์ ์ด ์คํ๋ทฐ์ ๋ค์ด๊ฐ๋ ์์๋ค์ด ๋ชจ๋ ๊ฐ์ ๊ฐ๋ก ๊ฐ๊ฒฉ์ ๊ฐ์ง๊ณ ์ถ๋ค๋ผ๊ณ ์๊ฐํ๋ค๋ฉด ํด๋น property๋ฅผ ๋ณ๊ฒฝํด์ฃผ๋ฉด ๋๋ค.
๊ทผ๋ฐ ์ด์ ๊ธ์์ ํน์ดํ ์น๊ตฌ๋ค์ intrinsic content size๋ผ๋ ๊ฒ์ ๊ฐ์ง๋ค๊ณ ์ค๋ช ํ์๋ค. stackview๋ ์ด๋ฐ์ ์ ์๊ณ ์๋ค. ๊ทธ๋์ ๊ธฐ๋ณธ์ ์ผ๋ก๋ ํด๋น size๋ฅผ ๊ธฐ์ค์ผ๋ก ์ ๋ ฌํ๋, ํ๋ ๊ทธ์ ํน์ฑ์ ๋ฐ๋ผ ์ด ์ต์ ์ด ๋ฌด์๋ ๋๋ ์๋ค๊ณ ํ๋ค.
fill
๊ฐ๋ฅํ๋ฉด ๊ฝ์ ์ฑ์ฐ๋ ด
์, stackview์ 4๊ฐ์ ์์๋ฅผ ๋ฃ์๋ค๊ณ ์๊ฐํด๋ณด์. ๊ทธ๋ฐ๋ฐ ์ฌ์ค โ์ด๋ค ์์โ๋ฅผ ๋ฃ์๋์ ๋ฐ๋ผ ์ํฉ์ ๋ฌ๋ผ์ง๋ค. stackview์ ๊ฐ๋ก ์ฌ์ด์ฆ๊ฐ 100์ด๋ผ๊ณ ๊ฐ์ ํ์. 4๊ฐ์ ์์๋ฅผ ๋ฃ์ ๊ฑด๋ฐ ์ด ๊ฐ๊ฐ์ ์์์ intrinsic content size๊ฐ 25์ด๋ค. ๊ทธ๋ฌ๋ฉด ๋ฌธ์ ๊ฐ ์๋ค. ์์ฃผ ํ๋ณตํ๊ฒ 25์ฉ ๋๋ ๋จน์ผ๋ฉด ๋๋ค. ๊ทธ๋ฐ๋ฐ ์ฌ์ค ๊ทธ๋ ์ง ์๋ค. ๊ฐ๊ฐ์ ์์๋ฅผ ์ฌ๋์ด๋ผ๊ณ ์๊ฐํด๋ดค์ ๋, 4์ธ์ค ๋ฐฉ์ก์๋ค๊ณ ๋ฐฉ์ด ํฌ๋ ์๋ ๋๋ผ๋ ๊ฒ์ ๊ฐ ์ฌ๋ ์ฌ์ด์ฆ์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๊ธฐ ๋๋ฌธ์ด๋ค. ๋จผ์ ๋ฉธ์น ์น๊ตฌ๋ค์ด ๋ค์ด๊ฐ์ ๋๋ฅผ ์๊ฐํด๋ณด์.
๋ฉธ์น๋ค์ด ๋ค์ด๊ฐ์ ๋ฐฉ์ด ๋๋ํ๊ฒ ๋จ๊ณ ์๋ค. ๊ทธ๋ฐ๋ฐ stackview์ distribution์ fill๋ก ์คฌ๊ธฐ ๋๋ฌธ์ ์ผ๋จ ๋์ด๋๊ธด ํด์ผํ๋ค. ๊ทธ๋ฐ๋ฐ ๊ธฐ์ค์ด ๋ญ๊น? ๊ทธ ๊ธฐ์ค์ hugging property๋ก ํ๋ค. hugging property๋ ๋ ์๊ณ ์ถ์ด! ๋ ์์์ง๊ณ ์ถ์ด! ์ ์ ๋์ธ๋ฐ, ๋ฐ๋๋ก ๋งํ๋ฉด ๋์ด๋๊ธฐ ์ซ์ด!! ๋ผ๋ ๋ง๊ณผ ๋์น์ด๋ค. ๊ฐ๊ฐ์ ์ฌ๋์ hugging property๋ฅผ ๋ฌ์๋์๋๋ฐ, ์ด๋ ๊ฒ ๋์์ ๋ ๊ฐ์ฅ ๋์ด๋๊ธฐ ์ซ์๊ฑด ์ฒซ๋ฒ์งธ ์์, ๋ฐ๋๋ ๋ง์ง๋ง ์์์ด๋ค. ๊ทธ๋์ stack view๋ hugging property๊ฐ ๊ฐ์ฅ ๋ฎ์ ์น๊ตฌ๋ฅผ ์ฌ์ ์์ด ๋๋ ค๋ฒ๋ฆฐ๋ค.
๋ง์ฝ 4๋ฒ์งธ ์น๊ตฌ๋ฅผ ๋๋ ธ์์๋ ๋ถ๊ตฌํ๊ณ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค๋ฉด ๋ค์ ํ์๋ ์ธ๋ฒ์งธ๋ค. ํ์ ๋ ผ๋ฆฌ๋ค.
์ด๋ฒ์๋ ๋๊ฐ์ ๋ผ์ง์น๊ตฌ๋ค๋ง ์๋ค๊ณ ์๊ฐํด๋ณด์. ์ข์ํฐ์ง ๊ฒ์ด๋ค. ๊ทธ๋ ๊ฒ ๋์์ ๋๋ ๊ฒฐ๊ตญ fill ์ต์ ์ด๊ธฐ ๋๋ฌธ์ ๋ง์ถ๊ธด ๋ง์ถฐ์ผ ํ๋ค. ๋๊ตด ํ๊ฒ์ผ๋ก ํ ๊น? ์ด ๋ ๊ธฐ์ค์ด ๋๋ ๊ฒ์ด Compress Resistance Property์ด๋ค. ์ฝ๊ฒ ๋งํ๋ฉด ๋ ์์์ง๊ธฐ ์ซ์ด!! ๋ผ๋ ๋ป์ธ๋ฐ ์ ์ํฉ์ ์ฐธ ์ ๋ง๋ค. ๊ฒฐ๊ตญ ๊ฐ์ฅ ๋ฎ์ ๊ฐ์ ๊ฐ์ง๊ณ ์๋ ๋ค๋ฒ์งธ ์น๊ตฌ๊ฐ ๋ชธ์ ๊ตฌ๊น๊ตฌ๊น ์ ๋๋ค.
๋ง์ฐฌ๊ฐ์ง๋ก ์ต๋ํ ์ ์์์๋(์ฆ, intrinsic content size๊น์ง) ๋ถ๊ตฌํ๊ณ ๊ณต๊ฐ์ด ์๋จ์ผ๋ฉด ๋ค์์ ์ธ๋ฒ์งธ๋ค.
fillEqually
์ ์ธ์ฐ์ง ๋ง๊ณ ๋ชจ๋ ๊ฐ๊ฒ ๊ฐ์ง๋ ด
fill๊ฐ์ ๊ฒฝ์ฐ ํฌ์์ ์ฐ์์ด์๋ค. ํ์ง๋ง ์ด๊ฑด ๊ณต์ฐ์ฃผ์ ์ฒด์ ๋ค. ๋ชจ๋ ๊ฐ๊ฒ ๋ฌด์กฑ์ ๊ฐ์ง๋ ๊ฒ์ด๋ค. ์ด ๊ฒฝ์ฐ intrisic content size์ ์๊ด์์ด ๊ฐ๊ฒ ๋ฐฐ์ ๋๋ค.
fillProportionally
์ด ์ผ๋จ fillํ๋ค์์, ๊ณต๊ฐ์ด ๋จ์ผ๋ฉด ๋๋ค size ๋น์จ์ ๋ง์ถฐ์ ์ปค์ง๋ ด
์ผ๋จ stackview๋ฅผ ์ฑ์ฐ๊ณ , ๋จ๋ ๊ณต๊ฐ์ด ์๊ธฐ๋ ๊ฒฝ์ฐ ๊ฐ ์์์ intrinsic content size ๋น์จ์ ๋ง๊ฒ ๊ณต๊ฐ์ ๋ถ๋ฐฐํ๋ค. ๋ง์ฝ ์์ ๋ฉธ์น๋ค ๊ทธ๋ฆผ์์ ๊ฐ ์์์ intrinsic content size๊ฐ ๋ค์๊ณผ ๊ฐ๋ค๋ฉด,
- ์ฒซ๋ฒ์งธ: 10
- ๋๋ฒ์งธ: 20
- ์ธ๋ฒ์งธ: 30
- ๋ค๋ฒ์จฐ: 40
๋จ์ ๊ณต๊ฐ์ด ๋ฐ์ํ์ ๋, ๋จ์ ๊ณต๊ฐ์ 10๊ฐ๋ก ๋๋์ด 1:2:3:4๋น์จ๋ก ๋๋ ๊ฐ๋๋ก ํ์ฌ fill์ ๋ง์กฑ์ํค๋ ๋ฐฉ๋ฒ์ด๋ค.
equalSpacing
๊ฐ๊ฒฉ๋ง ๋ง์ถฐ!
์ด๊ฒ๋ ์ฌ์ค ์ ํํ๊ฒ ์๋ ค๋ฉด ๋ฌธ์ ๊ฐ ์๋ค. ๊ทธ๋ผ ๊ณต๊ฐ์ด ๋จ๋ ๊ฒฝ์ฐ์๋ ๋๊ฐ ๋์ด๊ฐ๋๊ฐ? ๋ถ์กฑํ ๊ฒฝ์ฐ๋ ๋๊ฐ ์ค์ด๋๋๊ฐ?
fill ์ต์ ์์ ์ฅํฉํ๊ฒ ์ค๋ช ํ ์ด์ ๊ฐ ์ฌ๊ธฐ์๋ค. hugging, compress๊ธฐ์ค์ผ๋ก ์ค์ด๋ค๊ณ ๋์ด๋๋ค.
equalCentering
์ค์์ ๊ธฐ์ค์ผ๋ก ๊ฐ๊ฒฉ ๋ง์ถฐ!
์๋ฆฌ๋ ๋์ผํ๋ค.
Alignment
๊ฐ๋ก๋ ์ด์ ๋๋ฌ๊ณ , ๋ค๋ฅธ ์ ๋ ฌ ์กฐ๊ฑด์ด ํ์ํ๋ค. Alignment๋ axis์ ์์ง์ธ, horizontal์ธ ๊ฒฝ์ฐ vertical, ๋ถ๋ถ์ ์ ๋ ฌ์ ๊ฒฐ์ ํ๋ property๋ค.
์ ๋งํ๋ฉด ๊ทธ๋ฆผ๋ง ๋ด๋ ์ฝ๊ฒ ์ดํดํ ์ ์๋ค.
Common
ํ์ ํญ๋ชฉ์ horizontal, vertical์ ์๊ด์์ด ์ ์ฉ์ด ๊ฐ๋ฅํ๋ค. 90๋ ๋๋ฆฌ๊ธฐ๋ง ํ๋ฉด vertical์ด๋ค.
fill
center
axis: Horizontal
top
firstBaseline
bottom
lastBaseline
axis: Vertical
leading
trailing
Spacing
์ง๊ธ๊น์ง ์ฝ๋ค๋ณด๋ฉด, distribution์ด ๋ชจ๋ ์ญํ ์ ๋ค ํ๋ ๊ฒ์ฒ๋ผ ๋ณด์ธ๋ค. ํ์ง๋ง ํ๋์ ์ต์
! fillProportionally
์ ๊ฒฝ์ฐ์๋ โ๋จ๋ ๊ณต๊ฐ์ ๋ํด์ ๋น์จ์ ์ ์ฉโํ๊ธฐ ๋๋ฌธ์ ์์๋ผ๋ฆฌ์ ๊ฐ๊ฒฉ์ ์ ํด์ค์ผ ํ๋ค. fillProportionally
์ ๊ฒฝ์ฐ์๋ ๋ฑ! ์ ํด์ง ๊ฐ์ ์ ์ฉํ๋ค.
equalSpacing
, equalCentering
์ ๊ฒฝ์ฐ์๋ ํด๋น ๊ฐ์ด ์ ์ฉ๋๊ธฐ๋ ํ๋, ์ด๋ โ์ต์๊ฐโ์ด๋ค.
๊ธฐ๋ณธ๊ฐ์ 0์ด๋ฉฐ, ์์๋ก ์ง์ ํ ๊ฒฝ์ฐ overlap์ด ๊ฐ๋ฅํ๋ค.