TableView - heightForRowAtIndexPath 未被调用
TableView - heightForRowAtIndexPath not being called
在完成所有其他 Stack Overflow 表单之后,我为我的一个单元格实现了动态高度,如下所示:
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
var cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as UITableViewCell
if(indexPath.row == 1){
var image : UIImage = maskRoundedImage(image: UIImage(named: "Temp_Profile.png")!, radius: 150)
cell.imageView?.image = image
return cell
}
cell.textLabel?.text = TableArray[indexPath.row]
cell.backgroundColor = UIColor.init(colorLiteralRed: 0.56, green: 0, blue: 0.035, alpha: 1)
cell.textLabel?.textColor = UIColor.white
cell.textLabel?.font = UIFont(name: "Helvetica", size: 28)
return cell
}
func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
if indexPath.row == 1 {
return UITableViewAutomaticDimension * 3
}
return UITableViewAutomaticDimension
}
看起来很简单,但调试会话显示从未调用过 heightForRowAtIndexPath。 View Controller 是一个 UITableViewController,其他一切正常。你们有没有看到这个函数没有被调用的原因?
感谢您的帮助!
在Swift3中,签名为:
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat
您有旧签名,因此无法识别。
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
if indexPath.row == 1 {
return UITableViewAutomaticDimension * 3
}
return UITableViewAutomaticDimension
}
对我来说,我不得不这样做。
self.tableviewObj.delegate = self
所以,不要忘记给自己添加委托。因为 heightForRowAtIndexparth 是在委托协议中声明的。
如果您在 UITableViewController
中,请记住该方法必须是您需要的方法 override
否则方法名称是错误的。
在我的例子中,我使用的是 NSIndexPath
而不是 IndexPath
,它与要调用的正确方法不匹配
tableView(_ tableView: UITableView, heightForRowAt indexPath: NSIndexPath) -> CGFloat
当我更正为
tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat
xcode 会提示插入 override
关键字。
在我的例子中,我有三个控制器A、B、C。A是基本控制器,B继承自A,C继承自B。我在A中设置tableView委托,在B中实现heightForRowAt函数,以及我用C的时候出现这个问题,我猜是因为A中分配的代理最终指向了C,所以没有调用B中的方法。
在完成所有其他 Stack Overflow 表单之后,我为我的一个单元格实现了动态高度,如下所示:
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
var cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as UITableViewCell
if(indexPath.row == 1){
var image : UIImage = maskRoundedImage(image: UIImage(named: "Temp_Profile.png")!, radius: 150)
cell.imageView?.image = image
return cell
}
cell.textLabel?.text = TableArray[indexPath.row]
cell.backgroundColor = UIColor.init(colorLiteralRed: 0.56, green: 0, blue: 0.035, alpha: 1)
cell.textLabel?.textColor = UIColor.white
cell.textLabel?.font = UIFont(name: "Helvetica", size: 28)
return cell
}
func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
if indexPath.row == 1 {
return UITableViewAutomaticDimension * 3
}
return UITableViewAutomaticDimension
}
看起来很简单,但调试会话显示从未调用过 heightForRowAtIndexPath。 View Controller 是一个 UITableViewController,其他一切正常。你们有没有看到这个函数没有被调用的原因?
感谢您的帮助!
在Swift3中,签名为:
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat
您有旧签名,因此无法识别。
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
if indexPath.row == 1 {
return UITableViewAutomaticDimension * 3
}
return UITableViewAutomaticDimension
}
对我来说,我不得不这样做。
self.tableviewObj.delegate = self
所以,不要忘记给自己添加委托。因为 heightForRowAtIndexparth 是在委托协议中声明的。
如果您在 UITableViewController
中,请记住该方法必须是您需要的方法 override
否则方法名称是错误的。
在我的例子中,我使用的是 NSIndexPath
而不是 IndexPath
,它与要调用的正确方法不匹配
tableView(_ tableView: UITableView, heightForRowAt indexPath: NSIndexPath) -> CGFloat
当我更正为
tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat
xcode 会提示插入 override
关键字。
在我的例子中,我有三个控制器A、B、C。A是基本控制器,B继承自A,C继承自B。我在A中设置tableView委托,在B中实现heightForRowAt函数,以及我用C的时候出现这个问题,我猜是因为A中分配的代理最终指向了C,所以没有调用B中的方法。