在我的表视图中,先加载表,然后再加载图像,当图像加载时,我想从配置单元的ProductTableViewCell.swift文件中再次调用此函数。
override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
return cell.frame.size.height
}我该怎么做呢?
编辑:
import UIKit
class ProductTableViewCell: UITableViewCell {
//var appleview: AppleProductsTableViewController!
@IBOutlet weak var productImageView: UIImageView!
@IBOutlet weak var productTitleLabel: UILabel!
@IBOutlet weak var productDescriptionLabel: UILabel!
let screenSize: CGRect = UIScreen.mainScreen().bounds
func configureCellWith(product: Product){
productImageView.image = product.image
productDescriptionLabel.text = product.description
productTitleLabel.text = product.title
var urlstring = product.imageURL
ImageLoader.sharedLoader.imageForUrl(urlstring as String, completionHandler:{(image: UIImage?, url: String) in
//self.productImageView.frame.size = orgframe.frame.size
self.productImageView.image = image!
dispatch_async(dispatch_get_main_queue(), {
self.productImageView.frame.size = (image?.size)!
while self.productImageView.frame.size.height > 0.4 * self.screenSize.height {
self.productImageView.frame.size.width = self.productImageView.frame.size.width * 0.9
self.productImageView.frame.size.height = self.productImageView.frame.size.height * 0.9
println("kleiner 2")
}
while self.productImageView.frame.size.width > 0.6 * self.screenSize.width{
self.productImageView.frame.size.width = self.productImageView.frame.size.width * 0.9
self.productImageView.frame.size.height = self.productImageView.frame.size.height * 0.9
println("kleinrer")
}
self.productTitleLabel.center.y = self.productImageView.center.y + self.productImageView.frame.size.height/2 + 15
self.productDescriptionLabel.center.y = self.productTitleLabel.center.y + 28
NSNotificationCenter.defaultCenter().postNotificationName("renew", object: nil)
})
})
}
}

发布于 2015-06-23 06:53:03
只需使用:
tableView.reloadData()因此,
heightForRowAtIndexPath将再次调用,所有单元格都将获得“新的”计算高度。更好的想法(在大多数情况下)是使用Autolayout自动计算所需的空间。
编辑:如果你想从任何类重新装入你的表,你可以使用Notification。
所以在你的TableView中:
func viewDidLoad() {
super.viewDidLoad()
NSNotificationCenter.defaultCenter().addObserver(self, selector: "reloadTable:",name:"renew", object: nil)
}
func reloadTable(notification: NSNotification){
//load data here
self.tableView.reloadData()
}还有这个在你的牢房里。
NSNotificationCenter.defaultCenter().postNotificationName("renew", object: nil)发布于 2019-11-27 20:43:58
有一种“偷偷摸摸”的方法可以做到这点。
如果您使用:
tableView.beginUpdates()
tableView.endUpdates()不会重新加载任何单元格,但会触发heightForRowAt,单元格将自行调整大小。
致谢于Hamish Rickerby (blog)
https://stackoverflow.com/questions/30991147
复制相似问题