我试图制作一个tableViewCell,它们每个都有不同的高度。我尝试声明每个单元格标识符及其名称,并使用" switch&#34分成几个案例;。实际上我还想在代码中的mainViewCell上标注一个标签。我怎样才能改变每个细胞的高度?
import UIKit
class TableViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
@IBOutlet var tableView: UITableView!
override func viewDidLoad() {
super.viewdidload()
tableView.registerNib(UINib(nibName: "mainViewTableViewCell", bundle: nil), forCellReuseIdentifier: "mainViewCell")
}
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
tableView.scrollEnabled = false
return 4
}
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
switch tableView.numberOfRowsInSection(4) {
case 0:
let titleCell = tableView.dequeueReusableCellWithIdentifier("titleCell")! as UITableViewCell
return titleCell
case 1:
let wayCell = tableView.dequeueReusableCellWithIdentifier("whichWayCell")! as UITableViewCell
return wayCell
case 2:
let campusCell = tableView.dequeueReusableCellWithIdentifier("campusCell")! as UITableViewCell
return campusCell
default :
let mainViewCell = tableView.dequeueReusableCellWithIdentifier("mainViewCell")! as! mainViewTableViewCell
mainViewCell.mainViewLabel.text = onUpdate(timer)
return mainViewCell
}
}
func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
switch tableView.numberOfRowsInSection(4) {
case 0:
tableView.numberOfRowsInSection(1)
return 50
case 1:
tableView.numberOfRowsInSection(2)
return 50
case 2:
tableView.numberOfRowsInSection(3)
return 50
default:
tableView.numberOfRowsInSection(4)
return 300
}
}
func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
}
答案 0 :(得分:1)
您应该使用传递给UITableViewDataSource方法的indexPath。你的代码有几个问题。有文档here。
cellForRowAtIndexPath方法中的switch tableView.numberOfRowsInSection(4)
语句应为:switch(indexPath.section)
func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
switch tableView.numberOfRowsInSection(4) {
case 0:
tableView.numberOfRowsInSection(1)
return 50
case 1:
tableView.numberOfRowsInSection(2)
return 50
case 2:
tableView.numberOfRowsInSection(3)
return 50
default:
tableView.numberOfRowsInSection(4)
return 300
}
为什么要调用numberOfRowsInSection()?,这应留给操作系统调用。试试这个。如果您的tableview单元格高度因部分而异,请将switch(indexPath.row)
更改为switch(indexPath.section)
。
func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
var height : CGFloat = 0
switch(indexPath.row) {
case 0, 2, 3:
height = 50.0
case 4:
height = 300.0
default:
break
}
return height
}