iOS/Swift

[ Swift ] UIStackView์—์„œ ์—ฌ๋Ÿฌ ๋ฒ„ํŠผ์„ ์ •๋ ฌํ•˜๋Š” ๋ฐฉ๋ฒ•

๊ฒฝํ‘ธ 2022. 9. 18. 18:30
๋ฐ˜์‘ํ˜•

์•ˆ๋…•ํ•˜์„ธ์š”~

 

์˜ค๋Š˜์€  UIStackView์—์„œ ์—ฌ๋Ÿฌ ๋ฒ„ํŠผ์„

์ •๋ ฌํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด์„œ์ •๋ฆฌํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค : )

 

 


 

 

UIStackView

UIStackView๋Š” ์„œ๋ธŒ ๋ทฐ๋“ค์„ ์Œ“์•„์„œ

๋™์ ์œผ๋กœ ๋‚ด๋ถ€ ํฌ๊ธฐ๋‚˜ ์œ„์น˜๋ฅผ ์กฐ์ ˆํ•  ์ˆ˜ ์žˆ๋„๋ก ๋งŒ๋“  UIView์ž…๋‹ˆ๋‹ค.

 

์—ฌ๋Ÿฌ๊ฐ€์ง€ ์†์„ฑ๋“ค์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š”๋ฐ

ํ•˜๋‚˜์”ฉ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

1. Axis

- ์–ด๋–ค ๋ฐฉํ–ฅ์œผ๋กœ ์„œ๋ธŒ ๋ทฐ๋“ค์„ ๋†“์„ ๊ฒƒ์ธ์ง€ ๊ฒฐ์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

- Horizontal ํ˜น์€ Vertical๋กœ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

2. Spacing

- ๊ฐ ์„œ๋ธŒ๋ทฐ๋“ค์˜ ๊ฐ„๊ฒฉ์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

 

3. Alignment

- ์„œ๋ธŒ ๋ทฐ๋“ค์˜ ์ •๋ ฌ๋ฐฉ๋ฒ•์„ ๊ฒฐ์ •ํ•˜๋Š” ์†์„ฑ์ž…๋‹ˆ๋‹ค.

- ๊ธฐ์กด์— ์ •ํ•ด๋‘์—ˆ๋˜ Axis์— ๋”ฐ๋ผ ๋‹ค๋ฅด๊ฒŒ ์ •๋ ฌ๋ฉ๋‹ˆ๋‹ค.

(1) Horizontal

  • Fill: StackView์˜ ๋†’์ด๋งŒํผ ์„œ๋ธŒ ๋ทฐ๋“ค์˜ ๋†’์ด๊ฐ€ ์ •ํ•ด์ง‘๋‹ˆ๋‹ค.
  • Center:  StackView์˜ ์„œ๋ธŒ ๋ทฐ๋“ค์˜ ๋†’์ด๋Š” ๊ทธ๋Œ€๋กœ ๊ฐ€์ ธ๊ฐ€๊ณ  StackView์˜ ์ค‘์•™์— ์ •๋ ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • Top:  StackView์˜ ์„œ๋ธŒ ๋ทฐ๋“ค์˜ ๋†’์ด๋Š” ๊ทธ๋Œ€๋กœ ๊ฐ€์ ธ๊ฐ€๊ณ  StackView์˜ ์ƒ๋‹จ์— ์ •๋ ฌํ•ฉ๋‹ˆ๋‹ค.
  • Botton: StackView์˜ ์„œ๋ธŒ ๋ทฐ๋“ค์˜ ๋†’์ด๋Š” ๊ทธ๋Œ€๋กœ ๊ฐ€์ ธ๊ฐ€๊ณ  StackView ํ•˜๋‹จ์— ์ •๋ ฌํ•ฉ๋‹ˆ๋‹ค.

(2) Vertical [ Horizontal๊ณผ๋Š” ๋ฐ˜๋Œ€๋กœ ์„œ๋ธŒ ๋ทฐ๋“ค์˜ ๋„ˆ๋น„๋ฅผ ๊ทธ๋Œ€๋กœ ๊ฐ€์ ธ๊ฐ€๊ฒŒ ๋ฉ๋‹ˆ๋‹ค ]

  • Fill: StackVIew์˜ ๊ฐ€๋กœ ๊ธธ์ด๋งŒํผ ์„œ๋ธŒ ๋ทฐ๋“ค์˜ ๋„ˆ๋น„๊ฐ€ ์ •ํ•ด์ง‘๋‹ˆ๋‹ค.
  • Center: StackVIew์˜ ์„œ๋ธŒ ๋ทฐ๋“ค์˜ ๋„ˆ๋น„๋Š” ๊ทธ๋Œ€๋กœ ๊ฐ€์ ธ๊ฐ€๊ณ  ์ค‘์•™์— ์ •๋ ฌํ•ฉ๋‹ˆ๋‹ค.
  • Leading: StackView์˜ ์„œ๋ธŒ ๋ทฐ๋“ค์˜ ๋„ˆ๋น„๋Š” ๊ทธ๋Œ€๋กœ ๊ฐ€์ ธ๊ฐ€๊ณ  StackView์˜ ์ขŒ์ธก์— ์ •๋ ฌ๋ฉ๋‹ˆ๋‹ค.
  • trailing: StackView์˜ ์„œ๋ธŒ ๋ทฐ๋“ค์˜ ๋„ˆ๋น„๋Š” ๊ทธ๋Œ€๋กœ ๊ฐ€์ ธ๊ฐ€๊ณ  StackView์˜ ์šฐ์ธก์— ์ •๋ ฌ๋ฉ๋‹ˆ๋‹ค.

 

4. Distribution

์•Œ์•„๋‘์–ด์•ผํ•  ์‚ฌ์‹ค

๋„ˆ๋น„๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์„œ๋ธŒ ๋ทฐ๋“ค์˜ ๋„ˆ๋น„์˜ ํ•ฉ์ด StackView๋ณด๋‹ค ํฌ๊ฒŒ ๋˜๋ฉด compression resistance priority ์— ๋”ฐ๋ผ ์„œ๋ธŒ ๋ทฐ๋“ค์˜ ํฌ๊ธฐ๋ฅผ ์ค„์ด๊ณ , ๋ฐ˜๋Œ€๋กœ ์„œ๋ธŒ ๋ทฐ๋“ค์˜ ๋„ˆ๋น„์˜ ํ•ฉ์ด StackView์˜ ๋„ˆ๋น„๋ณด๋‹ค ์ž‘์œผ๋ฉด hugging priority์— ๋”ฐ๋ผ ๋ทฐ๋“ค์˜ ๋„ˆ๋น„๋ฅผ ํ™•์žฅ์‹œํ‚ค๊ฒŒ ๋˜๋Š” ๊ฒƒ์„ ์•Œ์•„๋‘์–ด์•ผํ•ฉ๋‹ˆ๋‹ค.

  • compression resistance priority: ์ตœ์†Œ ํฌ๊ธฐ์— ๋Œ€ํ•œ ์ œํ•œ ์šฐ์„ ์ˆœ์œ„
  • hugging prioity: ์ตœ๋Œ€ ํฌ๊ธฐ์— ๋Œ€ํ•œ ์ œํ•œ ์šฐ์„ ์ˆœ์œ„
  • Fill : ํ˜„์žฌ ๊ธฐ์ค€ Axis๋กœ ์„œ๋ธŒ ๋ทฐ๋“ค์„ ์ฑ„์šฐ๊ธฐ ์œ„ํ•œ ์†์„ฑ์ž…๋‹ˆ๋‹ค.
  • Fill Equally: ๊ฐ๊ฐ์˜ ์„œ๋ธŒ ๋ทฐ๋“ค์˜ ๋„ˆ๋น„/๋†’์ด๊ฐ€ ์–ด๋– ํ•œ๊ฐ€์— ๊ด€๊ณ„์—†์ด ๋ชจ๋‘ ๋™์ผํ•œ ๋„ˆ๋น„/๋†’์ด๋ฅผ ๊ฐ€์ง€๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.
  • Fill Proportionally: ๊ฐ๊ฐ์˜ ์„œ๋ธŒ ๋ทฐ๋“ค์˜ Intrinsic content size๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋„ˆ๋น„/๋†’์ด๋ฅผ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, ๋ฒ„ํŠผ์ด๋ผ๋ฉด titleLabel์˜ ๊ธธ์ด(๊ธ€์ž ์ˆ˜)์— ๋”ฐ๋ผ ๋„ˆ๋น„๊ฐ€ ์ •ํ•ด์ง€๊ณ  ํฐํŠธ์˜ ํฌ๊ธฐ์— ๋”ฐ๋ผ ๋†’์ด๊ฐ€ ์ •ํ•ด์ง€๊ฒŒ ๋˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
  • Equal Spacing: StackView ๋‚ด๋ถ€๋ฅผ ๊ฐ๊ฐ์˜ ์„œ๋ธŒ ๋ทฐ๋“ค์˜ ๊ฐ„๊ฒฉ์„ ๋™์ผํ•˜๊ฒŒ ์ ์šฉํ•˜์—ฌ ์ฑ„์šฐ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.
  • Equal Centering: ์„œ๋ธŒ ๋ทฐ๋“ค์˜ ์ค‘๊ฐ„ ์ง€์ ์œผ๋กœ๋ถ€ํ„ฐ ๊ฑฐ๋ฆฌ๊ฐ€ ๋™์ผํ•˜๋„๋ก Spacing์„ ๊ฒฐ์ •ํ•˜๊ณ  ์ •๋ ฌํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

 

5. ์ด์Šˆ

UIStackView๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ 5๊ฐœ์˜ ๋ฒ„ํŠผ์„ ์„ธ๋กœ๋กœ ์ •๋ ฌํ•˜๋ ค๊ณ  ํ–ˆ์œผ๋‚˜ ๊ฐ๊ฐ์˜ ๋ฒ„ํŠผ์˜ ์‚ฌ์ด์ฆˆ๊ฐ€ ์ค‘๊ตฌ๋‚œ๋ฐฉ์ด์—ˆ์Šต๋‹ˆ๋‹ค.

 

๋”ฐ๋ผ์„œ ์œ„์˜ ๋‚ด์šฉ์„ ์ˆ™์ง€ํ•˜๊ณ  ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ •๋ ฌํ•˜๊ฒŒ ๋˜๋ฉด ์ •์ƒ์ ์œผ๋กœ ๋™์ผํ•œ ์‚ฌ์ด์ฆˆ๋กœ ์ •๋ ฌ์ด ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

func setArchitectureStackView(names: [String], nextPages: [NextPage], verticalSpacing: CGFloat) {
    backgroundColor = .white
    
    axis = .vertical
    alignment = .fill // Axis๊ฐ€ Vertical์ด๋ฏ€๋กœ ๋„ˆ๋น„๋ฅผ ๊ฝ‰์ฑ„์›๋‹ˆ๋‹ค.
    spacing = verticalSpacing
    distribution = .fillEqually // ๋ชจ๋‘ ๋™์ผํ•œ ๋†’์ด์™€ ๋„ˆ๋น„๋ฅผ ๊ฐ€์ ธ์•ผํ•˜๋ฏ€๋กœ FillEqually

    for (name, nextPage) in zip(names, nextPages) {
        let architectureButton = ArchitectureButton()
        architectureButton.initializeNextPage(title: name, nextPage: nextPage)
        addArrangedSubview(architectureButton)
    }
}

์„ค๋ช… : ๊ฐ ๋ฒ„ํŠผ์˜ ์ด๋ฆ„, ๊ฐ ๋ฒ„ํŠผ์ด ๋„˜์–ด๊ฐ€์•ผ ํ•˜๋Š” ํ™”๋ฉด, ๊ทธ๋ฆฌ๊ณ  Vertical Spacing์„ ์ž…๋ ฅ๋ฐ›์•„ ์•„ํ‚คํ…์ฒ˜ ๋ฒ„ํŠผ๋“ค์„ ์„ธ๋กœ๋กœ ์ •๋ ฌํ•˜๋Š” ๋ฉ”์„œ๋“œ์ž…๋‹ˆ๋‹ค.

 

์ ์šฉ ํ›„ ๋ชจ์Šต

 

 

๊ทธ๋Ÿผ ์ด๋งŒ ๐Ÿ‘‹๐Ÿป ๐Ÿ‘‹๐Ÿป ๐Ÿ‘‹๐Ÿป

 

 

๋ฐ˜์‘ํ˜•