如何增加特定部分中特定单元格的高度
Posted
技术标签:
【中文标题】如何增加特定部分中特定单元格的高度【英文标题】:How can I increase the height for a specific Cell in a specific Section 【发布时间】:2018-06-10 17:20:54 【问题描述】:如何增加特定部分的特定单元格(在 UITableView 中)的高度(在我的情况下,第二部分是带有 Swift 的图像)。 我不知道是否可以将我的单元格设置为自动调整大小,但我目前想要的只是增加该单元格的大小,因为我看不到里面的任何东西。 我的应用看起来像这样:
我想增加里面有 WebView 的那个单元格的大小。
这是我的代码:
extension DetailsViewController: UITableViewDelegate, UITableViewDataSource
func numberOfSections(in tableView: UITableView) -> Int
return 2
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
switch section
case 0: return 6
case 1: return 1
default:
return 0
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
switch indexPath.section
// Section 1: Repository Details
case 0:
let cell = detailsTableView.dequeueReusableCell(withIdentifier: "repoDetailsCell", for: indexPath) as! DetailsTableViewCell
// Set each row from first section
switch indexPath.row
case 0:
cell.avatarImageView.downloadedFrom(link: "\(selectedRepo.owner.avatarURL)")
if indexPath.row == 0
self.detailsTableView.rowHeight = 60
cell.textLabel?.isHidden = true
cell.detailTextLabel?.text = selectedRepo.description
cell.textLabel?.numberOfLines = 0
cell.detailTextLabel?.numberOfLines = 0
return cell
case 1:
cell.textLabel?.text = selectedRepo.description
cell.textLabel?.numberOfLines = 0
cell.detailTextLabel?.isHidden = true
return cell
case 2:
cell.textLabel?.text = "Open Issues"
cell.detailTextLabel?.text = String(selectedRepo.openIssuesCount)
return cell
case 3:
cell.textLabel?.text = "Forks"
cell.detailTextLabel?.text = String(selectedRepo.forksCount)
return cell
case 4:
cell.textLabel?.text = "Watchers"
cell.detailTextLabel?.text = String(selectedRepo.watchersCount)
return cell
case 5:
cell.textLabel?.text = "URL"
cell.detailTextLabel?.text = selectedRepo.htmlURL
cell.detailTextLabel?.textColor = UIColor.blue
cell.detailTextLabel?.numberOfLines = 0
return cell
default:
return cell
// Section 2: Webview
case 1:
let cell = tableView.dequeueReusableCell(withIdentifier: "repoWebviewCell", for: indexPath) as! DetailsTableViewCell
// Set the WebView from Section 2
switch indexPath.row
case 0:
UIWebView.loadRequest(cell.webView)(NSURLRequest(url: NSURL(string: "\(selectedRepo.htmlURL)/blob/master/README.md")! as URL) as URLRequest)
return cell
default:
return cell
default: return UITableViewCell()
func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat
return 200
【问题讨论】:
【参考方案1】:实现heightForRowAt
委托方法。
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat
if indexPath.section == someSection && indexPath.row == someRow
return someBiggerHeight
else
return tableView.rowHeight // return the standard height for all others
如果您需要检查多个索引路径,那么使用switch
会更容易:
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat
switch indexPath
case [someSection, someRow]:
return someBiggerHeight
case [someOtherSection, someOtherRow]:
return someOtherBiggerHeight
default:
return tableView.rowHeight // return the standard height for all others
【讨论】:
好答案,像往常一样。 (已投票。)致 OP:请注意,实现heightForRowAt
委托方法会产生性能成本。当您的单元格具有可变高度的单元格时,表格视图必须做更多的工作来计算滚动位置。如果您有 heightForRowAt
的自定义实现,您应该认真考虑在表格视图上设置 estimatedRowHeight
属性。【参考方案2】:
您需要实现heightForRow
委托方法并为该部分的行返回适当的高度。如果您需要不同部分的不同行的可变高度,那么您可以在 tableview 部分和行上使用开关并返回不同的值。
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat
switch (indexPath.section, indexPath.row)
case (1, 0):
return 200
case (0, _):
return 60
default:
return 60 //some default value
【讨论】:
以上是关于如何增加特定部分中特定单元格的高度的主要内容,如果未能解决你的问题,请参考以下文章