tableView.dequeueReusableCell() 在 tableRow(_:heightForRowAt:) 方法中
tableView.dequeueReusableCell() inside of tableRow(_:heightForRowAt:) method
我需要为每个 table view
cell
指定一个特定的高度。高度取决于内容(=cell
里面的UITextField
的高度)。
为了计算它的高度,我想创建一个 "prototypeCell" 并向其中添加文本以获得所需的高度。这是我唯一需要这个创建的单元格的东西。我试过这个:
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
let entry = fetchedResultsController.object(at: indexPath)
guard !entry.isFault else { // some entries are faults, somehow
return 0
}
let prototypeCell = tableView.dequeueReusableCell(withIdentifier: "bitCell") as! BitCell
prototypeCell.configure(entry: entry) // add text and stuff
// .cellContentHeight calculates the height I need for the cell
return prototypeCell.cellContentHeight + baseRowHeight
}
我有两个问题:
我跳过了所有 entry
错误的对象(当我使用 table 视图打开应用程序时,有很多错误)。这有什么负面影响吗?
我可以在此方法中使用 tableView.dequeueReusableCell()
吗?据我了解,它使现有单元格出列并创建一个新单元格。但之后我有点把这个细胞扔掉了。这不好吗?
如果您需要更多代码,请告诉我。我不确定,需要什么来回答这个问题。
提前致谢!
您可以在您的 UITableViewCell 文件中创建 class 方法并将文本传递给此方法并返回 CGFloat 以获取单元格高度。
我为带有标签的单元格编写了此方法,但如果需要,您可以将其与 UITextField 一起使用
class func suggestedHeight(text:String) -> CGFloat{
let label = UILabel(frame:CGRectMake(0,0,UIScreen.mainScreen().bounds.size.width - LABEL_LEFT_AND_RIGHT_PADDING,1))
label.font = UIFont(name: "Regular", size: 14)
label.numberOfLines = 0
label.text = text
label.sizeToFit()
return TOP_PADDING + label.frame.height
}
然后在 heightForRow
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
let entry = fetchedResultsController.object(at: indexPath)
return BitCell.suggestedHeight(text:entry)
}
我需要为每个 table view
cell
指定一个特定的高度。高度取决于内容(=cell
里面的UITextField
的高度)。
为了计算它的高度,我想创建一个 "prototypeCell" 并向其中添加文本以获得所需的高度。这是我唯一需要这个创建的单元格的东西。我试过这个:
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
let entry = fetchedResultsController.object(at: indexPath)
guard !entry.isFault else { // some entries are faults, somehow
return 0
}
let prototypeCell = tableView.dequeueReusableCell(withIdentifier: "bitCell") as! BitCell
prototypeCell.configure(entry: entry) // add text and stuff
// .cellContentHeight calculates the height I need for the cell
return prototypeCell.cellContentHeight + baseRowHeight
}
我有两个问题:
我跳过了所有
entry
错误的对象(当我使用 table 视图打开应用程序时,有很多错误)。这有什么负面影响吗?我可以在此方法中使用
tableView.dequeueReusableCell()
吗?据我了解,它使现有单元格出列并创建一个新单元格。但之后我有点把这个细胞扔掉了。这不好吗?
如果您需要更多代码,请告诉我。我不确定,需要什么来回答这个问题。
提前致谢!
您可以在您的 UITableViewCell 文件中创建 class 方法并将文本传递给此方法并返回 CGFloat 以获取单元格高度。 我为带有标签的单元格编写了此方法,但如果需要,您可以将其与 UITextField 一起使用
class func suggestedHeight(text:String) -> CGFloat{
let label = UILabel(frame:CGRectMake(0,0,UIScreen.mainScreen().bounds.size.width - LABEL_LEFT_AND_RIGHT_PADDING,1))
label.font = UIFont(name: "Regular", size: 14)
label.numberOfLines = 0
label.text = text
label.sizeToFit()
return TOP_PADDING + label.frame.height
}
然后在 heightForRow
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
let entry = fetchedResultsController.object(at: indexPath)
return BitCell.suggestedHeight(text:entry)
}