我有一个动态的原型表视图。此表视图显示结构数组。每个结构都由两个单元格表示,准确的用DateCell
和timelineCell
表示。
在这种情况下,日期单元格是标题,并添加了func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
。
我希望表视图(数组的第一个索引)顶部的DateCell
(HeaderCell)具有不同的外观。我已经弄清楚了如何更改此标题的背景等(请参见viewForHeaderInSection
),但是如何更改此单元格的高度?
extension TimelineViewController: UITableViewDataSource, UITableViewDelegate {
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 1
}
func numberOfSections(in tableView: UITableView) -> Int {
return addDataArray.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let rowData = addDataArray[indexPath.section]
let cell = tableView.dequeueReusableCell(withIdentifier: "TimelineCell") as! TimelineCell
cell.setDrivenKm(drivenKm: rowData.driven)
cell.setConsumedL(consumedL: rowData.consumedL)
cell.setPricePerLiter(pricePerLiter: rowData.pricePerLiter)
return cell
}
func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
let rowData = addDataArray[section]
guard let last = addDataArray.first else { return nil }
let color: UIColor!
let headerCell = tableView.dequeueReusableCell(withIdentifier: "DateCell") as! DateCell
if rowData.date == last.date {
color = UIColor.white
headerCell.backgroundColor = UIColor(red: 0/255, green: 22/255, blue: 60/255, alpha: 1)
} else {
color = UIColor(red: 0/255, green: 22/255, blue: 60/255, alpha: 1)
}
headerCell.setDate(date: rowData.date, color: color)
return headerCell
}
}
答案 0 :(得分:0)
您需要实现(对于静态)
func tableView(_ tableView: UITableView,
heightForHeaderInSection section: Int) -> CGFloat {
return 100.0
}
动态
self.tableView.estimatedSectionHeaderHeight = 100.0
self.tableView.sectionHeaderHeight = UITableViewAutomaticDimension
并确保您的约束正确地挂在单元格,顶部,顶部,底部和底部
答案 1 :(得分:0)
尽管前面的答案是正确的,但是如果您在本节中只有两个项目(标头和单元格),并且在实现中这两个项目都是UITableViewCell
的子类,那么您可以在cellForRowAt
方法。只需将numberOfRowsInSection
中的数字增加到2,然后切换indexPath.row
。
extension TimelineViewController: UITableViewDataSource, UITableViewDelegate {
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 2
}
func numberOfSections(in tableView: UITableView) -> Int {
return addDataArray.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
switch indexPath.row {
case 0:
let rowData = addDataArray[section]
guard let last = addDataArray.first else { return UITableViewCell() }
let color: UIColor!
let headerCell = tableView.dequeueReusableCell(withIdentifier: "DateCell", for: indexPath) as! DateCell
if rowData.date == last.date {
color = UIColor.white
headerCell.backgroundColor = UIColor(red: 0/255, green: 22/255, blue: 60/255, alpha: 1)
} else {
color = UIColor(red: 0/255, green: 22/255, blue: 60/255, alpha: 1)
}
headerCell.setDate(date: rowData.date, color: color)
return headerCell
case 1:
let rowData = addDataArray[indexPath.section]
let cell = tableView.dequeueReusableCell(withIdentifier: "TimelineCell", for: indexPath) as! TimelineCell
cell.setDrivenKm(drivenKm: rowData.driven)
cell.setConsumedL(consumedL: rowData.consumedL)
cell.setPricePerLiter(pricePerLiter: rowData.pricePerLiter)
return cell
default:
return UITableViewCell()
}
}
}
但是,如果您确实要使用节标题,则可以使用UITableViewHeaderFooterView
的子类作为标题。