๐ŸŽ iOS & Swift

[iOS] CollectionView Cell ๋„ˆ๋น„ ๋™์ ์œผ๋กœ ์กฐ์ ˆํ•˜๊ธฐ

taeeekki 2021. 10. 28. 12:49

CollectionView Cell Dynamic Width, ์ปฌ๋ ‰์…˜ ๋ทฐ ์…€ ๋„ˆ๋น„ ๋™์ ์œผ๋กœ ์กฐ์ ˆํ•˜๊ธฐ

 

๐Ÿ’ญ ๋“ค์–ด๊ฐ€๋ฉฐ

๋ชจ๋“  UI ์š”์†Œ์˜ ํฌ๊ธฐ๊ฐ€ ๋™์ผํ•˜๋ฉด ์–ผ๋งˆ๋‚˜ ์ข‹์„๊นŒ์š”? ํ•˜์ง€๋งŒ ๊ทธ๋ ‡์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์šฐ๋ฆฌ๋Š” ๋ฐฉ๋ฒ•์„ ์ฐพ๊ฒŒ ๋˜์ฃ  ๐Ÿฅฒ ํŠนํžˆ๋‚˜ ์ปจํ…์ธ ์˜ ์‚ฌ์ด์ฆˆ์— ๋”ฐ๋ผ์„œ UI ์ปดํฌ๋„ŒํŠธ์˜ ์‚ฌ์ด์ฆˆ๋ฅผ ๋™์ ์œผ๋กœ ์กฐ์ ˆํ•ด์ฃผ๋Š” ์ƒํ™ฉ์€ ๊ฝค๋‚˜ ์ž์ฃผ ๋“ฑ์žฅํ•ฉ๋‹ˆ๋‹ค. ๊ทธ ์ค‘์—์„œ๋„ CollectionView๋Š” ๋‹จ๊ณจ ์†๋‹˜์ž…๋‹ˆ๋‹ค. CollectionView ์ž์ฒด์˜ ๋†’์ด๋ฅผ ๋™์ ์œผ๋กœ ์กฐ์ ˆํ•˜๋Š” ์ƒํ™ฉ์ด๋‚˜, CollectionView Cell์˜ ๋„ˆ๋น„๋‚˜ ๋†’์ด๋ฅผ ์กฐ์ ˆํ•˜๋Š” ์ƒํ™ฉ์„ ์˜ˆ๋กœ ๋“ค ์ˆ˜ ์žˆ๊ฒ ๋„ค์š”!

โœจ ์˜ค๋Š˜์€ CollectionView Cell์˜ ๋„ˆ๋น„๋ฅผ ๋™์ ์œผ๋กœ ์กฐ์ ˆํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค ใ€ฐ

 


๐Ÿ“บ ์š”๊ตฌ์‚ฌํ•ญ

์šฐ๋ฆฌ๊ฐ€ ๊ตฌํ˜„ํ•ด์•ผํ•  ์ƒํ™ฉ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์•„์š”. ๋นจ๊ฐ„์ƒ‰ ๋ฐ•์Šค ์˜์—ญ์„ ๊ตฌํ˜„ํ•ด์•ผ ํ•˜๋Š”๋ฐ ๊ฐ ์นดํ…Œ๊ณ ๋ฆฌ ์˜์—ญ์ด ํ…์ŠคํŠธ ๊ธธ์ด์— ๋งž๊ฒŒ ๋™์ ์œผ๋กœ ์กฐ์ ˆ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์Šคํฌ๋กค ๋ทฐ์— ๋ฒ„ํŠผ์œผ๋กœ ๋„ฃ๋Š” ๋ฐฉ๋ฒ•๋„ ์žˆ๊ฒ ์ง€๋งŒ ์šฐ๋ฆฌ๋Š” ์ปฌ๋ ‰์…˜ ๋ทฐ๋ฅผ ์ด์šฉํ•ด๋ณด๋„๋ก ํ•˜์ฃ !

Youtube ๊ตฌ๋… ํƒญ

 


 

๐Ÿ” ๊ฒ€์ƒ‰

์ผ๋‹จ ๋ชจ๋ฅด๊ฒ ์œผ๋ฉด ์Šคํƒ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ(stackoverflow) ๊ฐ€๋ณด๋Š”๊ฑฐ์ฃ ~ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ฒ€์ƒ‰ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‹ˆ๊นŒ ๋งํฌ๊ฐ€ ํ•˜๋‚˜ ๋‚˜์˜ค๋„ค์š”!

dynamic width cell swift
 

Dynamic cell width of UICollectionView depending on label width

I have a UICollectionView, that loads cells from reusable cell, which contains label. An array provides content for that label. I can resize label width depending on content width easily with sizeT...

stackoverflow.com

 


 

๐Ÿ• ์ ์šฉํ•  ์ฝ”๋“œ

์ ์šฉํ•  ์ฝ”๋“œ๋Š” ๋˜๊ฒŒ ๊ฐ„๋‹จํ•ด์š”. UICollectionViewDelegateFlowLayout๋ฅผ ์ฑ„ํƒํ•˜๊ณ  Cell Size๋ฅผ ๊ฒฐ์ •ํ•ด์ฃผ๋Š” ๋ธ๋ฆฌ๊ฒŒ์ดํŠธ ๋ฉ”์„œ๋“œ์—์„œ ์‚ฌ์šฉํ•ด์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค.





 

๐Ÿค– ์ฝ”๋“œ ๋œฏ์–ด๋ณด๊ธฐ

CGSize๋ž€

CGSize๋Š” ํฌ๊ธฐ ๊ฐ’(๋„ˆ๋น„์™€ ๋†’์ด ๊ฐ’)์„ ํฌํ•จํ•˜๋Š” ๊ตฌ์กฐ์ฒด์ž…๋‹ˆ๋‹ค.CGSize.width๋Š” ๋„ˆ๋น„๋ฅผ ์˜๋ฏธํ•˜๊ณ , CGSize.height๋Š” ๋†’์ด๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

 

size(withAttributes:) ๋ฉ”์„œ๋“œ๋ฅผ ์ด์šฉํ•ด๋ณด์ž

์š”๊ตฌ์‚ฌํ•ญ์ด ํ…์ŠคํŠธ ํฌ๊ธฐ์— ๋งž์ถฐ์„œ ์…€์˜ ๋„ˆ๋น„๋ฅผ ๋™์ ์œผ๋กœ ์กฐ์ ˆํ•ด์ฃผ์ž๋Š” ๊ฒƒ์ด์—ˆ๋Š”๋ฐ, ๊ณ ๋ฏผ์ด ๋˜๋Š” ๋ถ€๋ถ„์€ 'ํ…์ŠคํŠธ ํฌ๊ธฐ, ๊ธธ์ด๋ฅผ ์–ด๋–ป๊ฒŒ ์•Œ์ง€?' ์ด ๋ถ€๋ถ„์ผ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค~ ํ…์ŠคํŠธ๋„ size๋ฅผ ๊ตฌํ•  ์ˆ˜ ์žˆ์„๊นŒ์š”? size ์ธ์Šคํ„ด์Šค ๋ฉ”์„œ๋“œ๋ฅผ ์ด์šฉํ•˜๋ฉด ๊ตฌํ•ด๋ณผ ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

// ๋‹ค์Œ ๋ฉ”์„œ๋“œ๋Š” String ํƒ€์ž…(์ •ํ™•ํžˆ NSString ๊ฐ์ฒด) ๋’ค์— ๋ถ™์—ฌ์„œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. size(withAttributes: _)

 

size(withAttributes:) ๋ฉ”์„œ๋“œ ์‚ฌ์šฉ ์˜ˆ์‹œ

์‹ค์ œ๋กœ ์ ์šฉํ•˜๊ธฐ ์ „์— ๊ฐ„๋‹จํ•˜๊ฒŒ ์‚ฌ์šฉํ•ด๋ณด๋„๋ก ํ• ๊ฒŒ์š”. Text(String)๋ฅผ ๋‘˜๋Ÿฌ์‹ผ ํ•˜๋‚˜์˜ ์‚ฌ๊ฐํ˜•์„ ์ƒ๊ฐํ•˜๊ณ  size๋ฅผ ๊ตฌํ•ด์ฃผ๋Š” ๊ฒƒ์ด๋ผ๊ณ  ์ดํ•ดํ•ด๋„ ๊ดœ์ฐฎ์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

 

 

ํ…์ŠคํŠธ ์‚ฌ์ด์ฆˆ ๋งŒํผ ์…€์˜ ๋„ˆ๋น„๋ฅผ ์ง€์ •ํ•ด์ฃผ๋ฉด ๋˜๊ฒ ๋‹ค!

ํ…์ŠคํŠธ์˜ ์‚ฌ์ด์ฆˆ๋ฅผ ์•Œ์•˜๋‹ค๋ฉด ๊ทธ ์‚ฌ์ด์ฆˆ๋งŒํผ ์ปฌ๋ ‰์…˜ ๋ทฐ ์…€์˜ ๋„ˆ๋น„๋ฅผ ์ง€์ •ํ•ด์ฃผ๋ฉด ๋˜๊ฒ ์ฃ ? ์…€์˜ ์ขŒ์šฐ์— ์—ฌ๋ฐฑ์„ ์ฃผ๊ณ  ์‹ถ๋‹ค๋ฉด ์ ์ ˆํ•˜๊ฒŒ ์ˆ˜์น˜๋ฅผ ๋”ํ•ด์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค. ์•„๋ž˜์ฒ˜๋Ÿผ์š”.

// ๋‹ค์Œ์€ ์ •ํ™•ํ•œ ์ฝ”๋“œ๋Š” ์•„๋‹™๋‹ˆ๋‹ค. ์ดํ•ด๋ฅผ ๋•๊ธฐ ์œ„ํ•œ ์ˆ˜๋„์ฝ”๋“œ์ž…๋‹ˆ๋‹ค. // ์ด์–ด์„œ ์‹œ์ฒญํ•˜๊ธฐ ํ…์ŠคํŠธ ์‚ฌ์ด์ฆˆ์˜ ๋„ˆ๋น„ + 20(์—ฌ๋ฐฑ)์„ ๊ตฌํ•˜๊ฒ ๋‹ค. "์ด์–ด์„œ ์‹œ์ฒญํ•˜๊ธฐ".size(withAttributes: _).width + 20

 


๐ŸŒˆ ๋งˆ๋ฌด๋ฆฌ

๋‹ค์Œ์—๋Š” CollectionView ์ž์ฒด์˜ ๋†’์ด๋ฅผ ๋™์ ์œผ๋กœ ์กฐ์ ˆํ•˜๋Š” ๋ฐฉ๋ฒ•๊ณผ ์…€์˜ ๋†’์ด๋ฅผ ๋™์ ์œผ๋กœ ์กฐ์ ˆํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์†Œ๊ฐœํ•˜๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ๋ถ„๋ช… ํ•œ ๋ฒˆ ์ฏค์€ ์“ฐ์ด๋Š” ์ƒํ™ฉ์ด ๋‚˜์˜ค๊ฑฐ๋“ ์š”~ ๊ธ€์ด ๊ฝค๋‚˜ ๊ธธ์–ด์กŒ๋Š”๋ฐ ์ฝ์–ด์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค :-) ์ž˜๋ชป๋œ ๋‚ด์šฉ ์ง€์ ์ด๋‚˜ ํ”ผ๋“œ๋ฐฑ, ์กฐ์–ธ, ์งˆ๋ฌธ ๋“ฑ ์–ธ์ œ๋‚˜ ํ™˜์˜์ž…๋‹ˆ๋‹ค!


๐Ÿ—’ ๋งํฌ

 

Dynamic width cell

1๏ธโƒฃ ๋ฌธ์ œ ์ƒํ™ฉ

taekki-ios-wiki.notion.site

 

Dynamic cell width of UICollectionView depending on label width

I have a UICollectionView, that loads cells from reusable cell, which contains label. An array provides content for that label. I can resize label width depending on content width easily with sizeT...

stackoverflow.com

 

Apple Developer Documentation

developer.apple.com