iOS/Swift

[swift] UILabel intrinsicContentSize ํ™œ์šฉ๋ฐฉ๋ฒ•

๊ฒฝํ‘ธ 2022. 2. 23. 18:29
๋ฐ˜์‘ํ˜•

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

 

์˜ค๋Š˜์€ UILabel์˜ intrinsicContentSize์— ๋Œ€ํ•ด์„œ ์ž‘์„ฑํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค : )

 

์ง„ํ–‰ํ•˜๊ณ  ์žˆ๋Š” ํ”„๋กœ์ ํŠธ์—์„œ CollectionViewCell์˜ ํฌ๊ธฐ๋ฅผ Cell์•ˆ์— ์žˆ๋Š” Label์˜ 

ํ…์ŠคํŠธ ๊ธธ์ด, ํฐํŠธ์˜ ์‚ฌ์ด์ฆˆ์— ๋”ฐ๋ผ ๋™์ ์œผ๋กœ ์ฃผ๊ณ  ์‹ถ์—ˆ์Šต๋‹ˆ๋‹ค.

 

์—ฌ๋Ÿฌ ๋ฐฉ๋ฒ•๋“ค ์ค‘์—์„œ IntrinsicContentSize๋ฅผ ์•Œ๊ฒŒ ๋˜์—ˆ๊ณ 

์–ด๋–ป๊ฒŒ ์‚ฌ์šฉ๊ฐ€๋Šฅํ•œ์ง€ ๋ฐฉ๋ฒ•์„ ๊ณต์œ ํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

 

intrinsicContentSize - ์ฝ˜ํ…์ธ ์˜ ๋ณธ์งˆ์ ์ธ ์‚ฌ์ด์ฆˆ

  • UILabel ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ UIButton, UISwitch, UITextField์—๋„ ์žˆ๋Š” ํ”„๋กœํผํ‹ฐ๋กœ ํ•ด๋‹น ๊ฐ์ฒด์˜ Width์™€ Height์˜ ๊ณ ์œณ๊ฐ’์œผ๋กœ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
  • UIView์—๋Š” ์—†์œผ๋ฉฐ UISlider์—๋Š” Width๊ฐ’๋งŒ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.
  • AutoLayout์ด๋‚˜ SnapKit๊ณผ ๊ฐ™์€ ์ฝ”๋“œ ๋ฒ ์ด์Šค๋กœ UI๋ฅผ ๋งŒ๋“ค ๋•Œ width์™€ height์ด ์ •ํ•ด์ ธ ์žˆ์ง€ ์•Š๋”๋ผ๋„ ์ œ์•ฝ์กฐ๊ฑด์—์„œ ์—๋Ÿฌ๊ฐ€ ๋‚˜์ง€ ์•Š๋Š” ์ด์œ ๋Š” intrinsicContentSize๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

 

์ ์šฉ๋ฐฉ๋ฒ•

 

์ทจ๋ฏธ ์ž…๋ ฅ ํ™”๋ฉด
ezgif com-gif-maker

 

CollectionView์˜ '์ง€๊ธˆ ์ฃผ๋ณ€์—๋Š”' ์„น์…˜์— ์žˆ๋Š” ์…€์„ ํด๋ฆญํ•˜๋ฉด

'๋‚ด๊ฐ€ ํ•˜๊ณ  ์‹ถ์€' ์„น์…˜์— ํ‘œ์‹œํ•ด ์ฃผ๋Š” ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค.

 

๋‘ ์„น์…˜์˜ ํ…์ŠคํŠธ๋Š” ๊ฐ™์ง€๋งŒ '๋‚ด๊ฐ€ ํ•˜๊ณ  ์‹ถ์€' ์„น์…˜์˜ ํ…์ŠคํŠธ์—๋Š” "X"๊ฐ€ ์ถ”๊ฐ€๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ๊ธฐ์กด์˜ Label์˜ ์‚ฌ์ด์ฆˆ๋ณด๋‹ค "X" ๋งŒํผ ์ปค์ง„ ์ƒํƒœ๋กœ ๋„ฃ์–ด์ฃผ๊ณ  ์‹ถ์—ˆ์Šต๋‹ˆ๋‹ค.

 

๊ทธ๋ž˜์„œ sizeForItemAt์„ ์ด์šฉํ•ด ๊ฐ ์…€์˜ ์‚ฌ์ด์ฆˆ๋ฅผ ๋ฐ˜ํ™˜ํ•  ๋•Œ

Label์˜ intrinsicContentSize๋ฅผ ํ™œ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.

 

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

    let label = UILabel()

    label.text = indexPath.section == 0 ? viewModel.userItems[indexPath.row].hobby : viewModel.wantItems[indexPath.row] + "  X"

    return CGSize(width: label.intrinsicContentSize.width + 10, height: label.intrinsicContentSize.height + 10)
}

 

์ถ”๊ฐ€์ ์œผ๋กœ

ํŒจ๋”ฉ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” Label์„ ๋งŒ๋“ค๊ณ  ์‹ถ์„ ๋•Œ ์ด ํ”„๋กœํผํ‹ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.

์œ„์˜ ์ฝ”๋“œ์ฒ˜๋Ÿผ height๊ฐ’๋„ ์ถ”๊ฐ€์ ์œผ๋กœ ์›ํ•˜๋Š” ๋งŒํผ ๋„ฃ์–ด์ฃผ๊ฒŒ ๋˜๋ฉด

์ƒํ•˜์— ํŒจ๋”ฉ์ด ๋“ค์–ด๊ฐ€ ์žˆ๋Š” ํ˜•ํƒœ๋กœ ๋ณด์ด๊ฒŒ ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

 

ํ˜น์‹œ ๋” ์ข‹์€ ๋ฐฉ๋ฒ•์ด ์žˆ์œผ์‹œ๋‹ค๋ฉด ๋Œ“๊ธ€๋กœ ๊ณต์œ ํ•ด ์ฃผ์‹œ๋ฉด๊ฐ์‚ฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

 

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

๋ฐ˜์‘ํ˜•