๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ’ป Programming ๊ฐœ๋ฐœ/๐ŸŽ iOS ๊ฐœ๋ฐœ, Swift

[Swift]๋‹ค์–‘ํ•œ ๋””๋ฐ”์ด์Šค์— ๋งž์ถฐ ์…€ ์‚ฌ์ด์ฆˆ๋ฅผ ์กฐ์ •ํ•˜๊ณ ์ž ํ•  ๋•Œ + ์‚ฌ์ด์ฆˆ๊ฐ€ ์•ˆ ๋ฐ”๋€Œ์—ˆ์„ ๋•Œ ํ•ด๊ฒฐ๋ฐฉ๋ฒ• (CollectionViewDelegateFlowLayout ํ”„๋กœํ† ์ฝœ)

by kimdee 2022. 3. 17.
๋ฐ˜์‘ํ˜•

[Swift]๋‹ค์–‘ํ•œ ๋””๋ฐ”์ด์Šค์— ๋งž์ถฐ ์…€ ์‚ฌ์ด์ฆˆ๋ฅผ ์กฐ์ •ํ•˜๊ณ ์ž ํ•  ๋•Œ + ์‚ฌ์ด์ฆˆ๊ฐ€ ์•ˆ ๋ฐ”๋€Œ์—ˆ์„ ๋•Œ ํ•ด๊ฒฐ๋ฐฉ๋ฒ• (CollectionViewDelegateFlowLayout ํ”„๋กœํ† ์ฝœ)

 

 

์ œ๊ฐ€ ํ™”๋ฉด ์งค ๋•Œ๋งˆ๋‹ค ํ—ท๊ฐˆ๋ฆฌ๋Š” ๋ถ€๋ถ„์ด๋ผ ์ •๋ฆฌํ•ด๋ด…๋‹ˆ๋‹ค. 

 

 

 

์ฝœ๋ ‰์…˜ ๋ทฐ์˜ ์…€ ์‚ฌ์ด์ฆˆ๋ฅผ ๋””๋ฐ”์ด์Šค์— ๋”ฐ๋ผ์„œ ์กฐ์ •ํ•˜๊ณ  ์‹ถ์„ ๋•Œ 

 

์˜ˆ๋ฅผ ๋“ค์–ด ์ œ๊ฐ€ ์›ํ•˜๋Š” ํ™”๋ฉด์ด ์•„๋ž˜์™€ ๊ฐ™๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ์‹œ๋‹ค. ์ €๋Š” ์ฝœ๋ ‰์…˜ ๋ทฐ์—์„œ ๋‘๊ฐœ์˜ ์…€์ด ํ•œ ์ค„์— ์œ„์น˜ํ•˜๊ณ , ๊ฐ ์…€ ์‚ฌ์ด์˜ ์—ฌ๋ฐฑ์€ 20์ด๋ฉฐ, ์…€์˜ ๋น„์œจ์€ 1:1.4์ •๋„์˜ ํฌ๊ธฐ๋ฅผ ์›ํ•˜๊ณ , inset์ด ํ™”๋ฉด ์ขŒ์šฐ์— ์—†๊ธธ ์›ํ•ฉ๋‹ˆ๋‹ค. ์ €๋Š” ์ œ๊ฐ€ ์•„์ดํฐ 13 ๋ฏธ๋‹ˆ๋ฅผ ์“ฐ๋“ , ๋งฅ์Šค๋ฅผ ์“ฐ๋“  ๋ณด์ด๋Š” ๋ชจ์–‘์ƒˆ๊ฐ€ ์•„๋ž˜์™€ ๋™์ผํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. 

์™„์„ฑ๋  ํ™”๋ฉด์€ ์ด๋Ÿฌํ•œ ๋ชจ์–‘์ƒˆ๋ฅผ ๋Œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ด๋ ‡๊ฒŒ ์ผ๊ด€๋œ ํ™”๋ฉด์„ ๋ณด์—ฌ์ฃผ๊ธฐ ์œ„ํ•ด์„œ ์ €๋Š” ํ•ด๋‹น ํ™”๋ฉด์„ ๋‹ด๋‹นํ•˜๋Š” UIViewController์— UICollectionViewDelegateFlowLayout ํ”„๋กœํ† ์ฝœ์„ ์ƒ์†๋ฐ›์Šต๋‹ˆ๋‹ค. 

UIViewController : UIViewController, UICollectionViewDataSource, 
	UICollectionViewDelegate, UICollectionViewDelegateFlowLayout {
    // code ์˜์—ญ 
     override func viewDidLoad() {
        super.viewDidLoad()
    }
}

CollectionView๋ฅผ ๊ตฌ์„ฑํ•˜๊ธฐ ์œ„ํ•ด์„œ ๊ธฐ๋ณธ์ ์œผ๋กœ ํ•„์š”ํ•œ ํ”„๋กœํ† ์ฝœ์ธ UIViewcontroller, UICollectionViewDataSource์™€ UICollectionViewDelegate ๋ฅผ ํฌํ•จํ•˜์—ฌ ์ด๋ ‡๊ฒŒ ์‰ผํ‘œ๋กœ ๊ตฌ๋ถ„ํ•˜์˜ ์ƒ์†ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๊ฐ€๋…์„ฑ๊ณผ ํŽธ์˜์„ฑ์„ ์œ„ํ•ด extension์œผ๋กœ ๋”ฐ๋กœ ์ •๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

extension UIViewController : UICollectionViewDelegateFlowLayout  {}

ํ•ด๋‹น ํ”„๋กœํ† ์ฝœ์—์„œ ์…€์˜ ์‚ฌ์ด์ฆˆ๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” ๊ฒƒ์€ collectionView ๋ฉ”์„œ๋“œ ์ค‘ sizeForItemAt ์ธ์ž๊ฐ€ ์žˆ๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ๋ถˆ๋Ÿฌ์™€ ์ •์˜ํ•ด์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค. 

 

์œ„ ํ™”๋ฉด์„ ํ† ๋Œ€๋กœ ์™„์„ฑ๋œ ์ฝ”๋“œ๋Š” ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค. 

extension UIViewController: UICollectionViewDelegateFlowLayout {
    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {

        let margin: CGFloat = 20
        let width: CGFloat = (collectionView.bounds.width - margin) / 2
        let height: CGFloat = width * 1.4

        return CGSize(width: width, height: height )
    }
}

 

* ํ•ด๋‹น ์ฝœ๋ ‰์…˜๋ทฐ์˜ ๊ฐ€๋กœ๊ธธ์ด๋ฅผ ๊ตฌํ•˜๋Š” ๋ฐฉ๋ฒ•

CollectionView.bounds.width

 

CGSize๋ผ๋Š” ํ˜•ํƒœ๋กœ ์‚ฌ์ด์ฆˆ๋ฅผ ๋ฆฌํ„ดํ•ด์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ์‚ฌ์ด์ฆˆ์™€ ๊ด€๋ จ๋œ ๋ณ€์ˆ˜๋“ค์„ CGFloat ์œผ๋กœ ํƒ€์ž… ๋ช…์‹œ๋ฅผ ํ•ด์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค. 

 

๊ผญ ํ™•์ธํ•  ๋ถ€๋ถ„

(์œ„ ์ฝ”๋“œ๋Œ€๋กœ ์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ์—์„œ ๋ณด์ด์ง€ ์•Š๋Š”๋‹ค๋ฉด ์ด ๋ถ€๋ถ„์„ ๊ผญ ์ฒดํฌํ•ด๋ณด์„ธ์š”) 

์—ฌ๊ธฐ์„œ ์ค‘์š”ํ•œ ๊ฒƒ์€ ํ•ด๋‹น ์ฝœ๋ ‰์…˜ ๋ทฐ์˜ Size Inspector์—์„œ Estimate size ๋ฅผ None์œผ๋กœ ์„ค์ •ํ•ด์ฃผ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

 

์ฐธ๊ณ ๋กœ ์ด ์‚ฌ์ด์ฆˆ ์ธ์ŠคํŽ™ํ„ฐ์—์„œ ์…€๊ณผ ํ–‰๊ฐ„ ์—ฌ๋ฐฑ, ํ—ค๋” ๋ฐ ํ‘ธํ„ฐ ์‚ฌ์ด์ฆˆ, ์„น์…˜ inset์„ ์ง€์ •ํ•ด์ค„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ Inset์„ ์ง€์ •ํ•ด์ฃผ์—ˆ๋‹ค๋ฉด ์œ„์˜ ์ฝ”๋“œ ์˜์—ญ์—์„œ ํ•ด๋‹น inset ๊ฐ’์„ ํฌํ•จํ•˜์—ฌ ์…€ ์‚ฌ์ด์ฆˆ๋ฅผ ๊ณ„์‚ฐํ•ด์ฃผ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. 

 

๋งŒ์•ฝ Automatic์œผ๋กœ ํ•  ๊ฒฝ์šฐ, ์ž์ฒด์ ์œผ๋กœ ์Šคํ† ๋ฆฌ๋ณด๋“œ์—์„œ ์ง€์ •ํ•ด์ค€ ์…€ ์‚ฌ์ด์ฆˆ์™€ ์˜คํ† ๋ ˆ์ด์•„์›ƒ์„ ํ†ตํ•ด ์…€ ์‚ฌ์ด์ฆˆ๋ฅผ ๊ณ„์‚ฐํ•˜๋ฏ€๋กœ ๋””๋ฐ”์ด์Šค์— ๋”ฐ๋ผ ์˜๋„ํ•œ ํ˜•ํƒœ๋Œ€๋กœ ํ‘œํ˜„๋˜์ง€ ์•Š์„ ์ˆ˜  ์žˆ์Šต๋‹ˆ๋‹ค.

 

์ฐธ๊ณ ๋งํฌ

1. UICollectionViewDelegateFlowLayout ๋ฌธ์„œ

https://developer.apple.com/documentation/uikit/uicollectionviewdelegateflowlayout

 

Apple Developer Documentation

 

developer.apple.com

 

2. collectionView(_:layout:sizeForItemAt:)

https://developer.apple.com/documentation/uikit/uicollectionviewdelegateflowlayout/1617708-collectionview

 

Apple Developer Documentation

 

developer.apple.com

 

 


๋งˆ์น˜๋ฉฐ 

 

์˜ค๋Š˜๋„ ์ฝ์–ด์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

 

๊ถ๊ธˆํ•œ ์ ์ด ์žˆ๋‹ค๋ฉด ๋Œ“๊ธ€๋กœ, ๋„์›€์ด ๋˜์…จ๋‹ค๋ฉด ๊ณต๊ฐ ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

ํ˜น์‹œ ์ˆ˜์ •ํ•˜๊ฑฐ๋‚˜ ํ”ผ๋“œ๋ฐฑํ•˜์‹ค  ๋‚ด์šฉ ์žˆ๋‹ค๋ฉด ์–ธ์ œ๋“  ๋Œ“๊ธ€๋กœ ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

 

๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

 

 

 

๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€