tableView๋ฅผ ๋‹ค๋ฃจ๋‹ค๋ณด๋ฉด ์…€์˜ ํฌ๊ธฐ๋ฅผ ์ •ํ•˜๋Š” ์ผ์ด ์ƒ๋‹นํžˆ ๊ท€์ฐฎ์„ ๋•Œ๊ฐ€ ์žˆ๋‹ค. ์–ด๋–ป๊ฒŒ ํ•˜๋ฉด ๋™์ ์ธ cell์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š”์ง€ ํ™•์ธํ•ด๋ณด์ž.

Working with Self-Sizing Table View Cells

์• ํ”Œ์—์„œ๋Š” ์ผ๋‹จ ์ด ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜์ง€ ๋ง๋ผ๊ณ  ํ•œ๋‹ค. tableViewDelegate์— ์žˆ๋Š” tableView:heightForRowAtindexPath๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ฒ˜๋ฆฌํ•˜๋ผ๊ณ  ํ•œ๋‹ค. ์•„๋งˆ ์„ฑ๋Šฅ์ƒ ๋ฌธ์ œ์ผ ๊ฐ€๋Šฅ์„ฑ์ด ํฌ๋‹ค.

ํ•˜์ง€๋งŒ ์šฐ๋ฆฌ๋Š” ์ด๋ ‡๊ฒŒ ๋‹จ์ˆœํ•œ ์•ฑ๋งŒ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋‹ค. ๋ฉ”์‹ ์ €๊ฐ™์€ ๊ฒฝ์šฐ ์‚ฌ์šฉ์ž๊ฐ€ ์ž…๋ ฅํ•˜๋Š” text๊ธธ์ด์— ๋”ฐ๋ผ cell height๊ฐ€ ๋ณ€๊ฒฝ๋˜์–ด์•ผ ํ•œ๋‹ค. ์•„๋‹ˆ๋ฉด ์‚ฌ์šฉ์ž๊ฐ€ ์ž…๋ ฅํ•œ ํ…์ŠคํŠธ๊ฐ€ ๊ฐ€๋ ค์ ธ์„œ ์ฝ๊ธฐ ์–ด๋ ค์›Œ์งˆ์ง€๋„ ๋ชจ๋ฅธ๋‹ค.

๋ฐฉ๋ฒ•

๋‘๊ฐ€์ง€ property๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ฐ„๋‹จํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.

  • tableView.rowHeight
  • tableView.estimatedRowHeight
private func setupTableView() {
    self.tableView.rowHeight = UITableView.automaticDimension
    self.tableView.estimatedRowHeight = 77
}

.rowHeight์—๋Š”, ๋‚˜ ์ด์ œ๋ถ€ํ„ฐ ์ปจํ…์ธ ์— ๋งž๊ฒŒ ๊ณ„์‚ฐํ•ด์„œ cell ๋†’์ด ์ ์šฉํ• ๊ฑฐ์•ผ! ๋ผ๊ณ  ์•Œ๋ ค์ฃผ๊ณ , .estimatedRowHeight์—๋Š” ๋Œ€์ถฉ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ง์ž‘ํ•œ cell height๋ฅผ ์•Œ๋ ค์ค€๋‹ค. ์™œ ๊ตณ์ด ์•Œ๋ ค์ค„๊นŒ. ์–ด์ฐจํ”ผ ์˜คํ†  ๋ ˆ์ด์•„์›ƒ์ด ๊ณ„์‚ฐํ• ํ…๋ฐ?

Providing a nonnegative estimate of the height of rows can improve the performance of loading the table view. If the table contains variable height rows, it might be expensive to calculate all their heights when the table loads. Using estimation allows you to defer some of the cost of geometry calculation from load time to scrolling time.

์Œ์ด ์•„๋‹Œ ์ถ”์ •์น˜๋ฅผ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์ด tableView์˜ ์„ฑ๋Šฅ์— ์˜ํ–ฅ์„ ๋ผ์นœ๋‹ค๊ณ  ํ•œ๋‹ค. ๋งŒ์•ฝ์— row๊ฐ€ ๋งŽ๋‹ค๋ฉด, autolayout ์ž์ฒด๋ฅผ ๊ณ„์‚ฐํ•˜๋Š” ๊ฒƒ์ด ๋งค์šฐ cost๊ฐ€ ๋†’์„ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

์ฆ‰, ์ถ”์ •์น˜๋ฅผ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ ์ž์ฒด๊ฐ€ ์„ฑ๋Šฅ์ ์œผ๋กœ ๋” ์ข‹๋‹ค๋Š” ๊ฒƒ. ์Šคํฌ๋กคํ•˜๊ฒŒ ๋˜๋ฉด์„œ ๋ณด์ด๋Š” ํ™”๋ฉด๊ณผ ์—ฐ๊ณ„๋œ ๋ฌธ์ œ์ธ ๋“ฏ ํ•˜๋‹ค.

220419 ์ถ”๊ฐ€

Refactoring ์—…๋ฌด ์ค‘, cell์˜ ๋†’์ด๊ฐ€ ๋ฐ˜์˜์ด ๋˜์ง€ ์•Š๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ๋‹ค. viewModel๋กœ ๋ถ€ํ„ฐ data๋ฅผ ๋กœ๋“œํ•˜๊ณ , subscriber๊ฐ€ ์ด๋ฅผ ๋ฐ›์€ ๋’ค์— ํ™”๋ฉด์— ๊ทธ๋ ค์ฃผ๊ธฐ๋งŒ ํ•˜๋ฉด ๋˜๋Š”๋ฐ, ๋‹ค์–‘ํ•œ ํ™”๋ฉด์—์„œ ํ•ด๋‹น tableView๊ฐ€ ๋ณด์—ฌ์•ผ ํ•ด์„œ tableView์˜ ๋™์ ์ธ ๋ณ€ํ™”๊ฐ€ ํ•„์š”ํ–ˆ๋‹ค.

์ด์ „ ์ฝ”๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ™”๋ฉด์ด appearํ•˜๋Š” ์‹œ์ ์— constraint๋ฅผ ๋ฐ˜์˜ํ•˜์—ฌ ํ•ด๊ฒฐํ–ˆ๋‹ค.

self.tableViewHeight.constant = self.tableView.contentSize.height
self.tableView.layoutIfNeeded()

ํ•˜์ง€๋งŒ ์›๋ž˜ ๋ณด์—ฌ์ ธ์•ผ ํ•˜๋Š” cell์˜ ํฌ๊ธฐ๊ฐ€ 60์ผ ๋•Œ, ๊ณ„์†ํ•ด์„œ 44์˜ ํฌ๊ธฐ๋กœ ๋ณด์—ฌ์ง์„ ํ™•์ธํ–ˆ๋‹ค. ๋ฌธ์ œ๋ฅผ ์‚ดํŽด๋ณด๋‹ˆ, ์ด์ „ ์ž‘์—…์ž๊ฐ€ ํ•ด๋‹น ๋ถ€๋ถ„์„ ๋ช…์‹œํ•˜์ง€ ์•Š์•˜์Œ์ด ํ™•์ธ๋˜์—ˆ๋‹ค.

self.tableView.estimatedRowHeight = 44
self.tableView.rowHeight = UITableView.automaticDimension

์œ„ ์ฝ”๋“œ๋Š” ์ƒ์†๋ฐ›์€ UITableView์ด๋‹ค. overrideํ•˜์—ฌ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š์•„ ๋ฐœ์ƒํ•œ ๋ฌธ์ œ์ด๋‹ค. ์‹ค์ œ ๊ฒช์–ด๋ณด๋‹ˆ ๋ฐฐ์šฐ๋Š”๊ฒŒ ์ค‘์š”ํ•˜๋‹ค๋Š” ์ƒ๊ฐ์ด ๋“ ๋‹ค.

Reference