我需要为每个table view
cell
设置一个特定的高度。高度取决于内容(= UITextField
内cell
的高度)。
为了计算它的高度,我想创建一个" 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
个对象(当我用表视图打开应用程序时,它们中有很多个)。这会产生任何负面影响吗?
我可以在此方法中使用tableView.dequeueReusableCell()
吗?据我了解,它将现有单元格出列并创建一个新单元格。但是之后我倾倒了这个细胞。这不好吗?
如果您需要更多代码,请告诉我。我不确定,需要回答什么。
提前致谢!
答案 0 :(得分:1)
您可以在UITableViewCell文件中创建类方法,并将文本传递给此方法,并返回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)
}