我正在尝试子类化Cell,但我在init()
中获得的帧大小不是我在heightForRowAtIndexPath
中设置的帧大小。
class MyCell: UITableViewCell {
override init(style: UITableViewCellStyle, reuseIdentifier: String!) {
super.init(style: style, reuseIdentifier: reuseIdentifier)
initCell()
}
required init(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
initCell()
}
override func awakeFromNib() {
super.awakeFromNib()
}
override func setSelected(selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)
println("ContentViewFrame IN SET SELECTED: \(self.contentView.frame)")
}
func initCell() {
println("ContentViewFrame IN initCell: \(self.contentView.frame)")
}
}
我用tabelView注册它:
myTable.registerClass(MyCell.self, forCellReuseIdentifier: "awesomeCell")
使用它:
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("conversationCell", forIndexPath: indexPath) as ConversationCell
return cell
}
动态设置高度:
func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
return 100.0
}
这是一个控制台输出:
ContentViewFrame IN initCell: (0.0,0.0,320.0,44.0)
ContentViewFrame IN SET SELECTED: (0.0,0.0,320.0,99.5)
ContentViewFrame IN SET SELECTED: (0.0,0.0,320.0,99.5)
所以我希望初始化时单元格的高度为100.0。但它的高度为44.0,只有setSelected
函数返回正确的高度。在单元初始化的哪个阶段,我应该定义我的自定义init,所以我可以使用由heightForRowAtIndexPath
定义的高度的单元格?
答案 0 :(得分:3)
将该功能放在layoutSubviews()
中。你没有把功能放在那里,因为它是"布置子视图",而是因为它是在单元的生命周期中调用的函数,你可以保证单元的所有子视图都是事实上,它由super.layoutSubviews()
的第一行排列,因此contentView.frame
将被定义和准确。无法保证contentView.frame
在init中准确无误。更改框架的可能位置是prepareForReuse()
,因为在重新使用之前,您可以清理和自定义单元格。它看起来像这样:
override func layoutSubviews() {
super.layoutSubviews()
myFunction()
}