首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >手动调用heightForRowAtIndexPath

手动调用heightForRowAtIndexPath
EN

Stack Overflow用户
提问于 2015-06-23 06:50:38
回答 2查看 2.1K关注 0票数 0

在我的表视图中,先加载表,然后再加载图像,当图像加载时,我想从配置单元的ProductTableViewCell.swift文件中再次调用此函数。

代码语言:javascript
复制
override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath:  NSIndexPath) -> CGFloat {
 return cell.frame.size.height
}

我该怎么做呢?

编辑:

代码语言:javascript
复制
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)
        })


    })


}


}

EN

回答 2

Stack Overflow用户

发布于 2015-06-23 06:53:03

只需使用:

代码语言:javascript
复制
tableView.reloadData()

因此,

代码语言:javascript
复制
heightForRowAtIndexPath

将再次调用,所有单元格都将获得“新的”计算高度。更好的想法(在大多数情况下)是使用Autolayout自动计算所需的空间。

编辑:如果你想从任何类重新装入你的表,你可以使用Notification。

所以在你的TableView中:

代码语言:javascript
复制
 func viewDidLoad() {
    super.viewDidLoad()
    NSNotificationCenter.defaultCenter().addObserver(self, selector: "reloadTable:",name:"renew", object: nil)
}

    func reloadTable(notification: NSNotification){
    //load data here
    self.tableView.reloadData()
}

还有这个在你的牢房里。

代码语言:javascript
复制
NSNotificationCenter.defaultCenter().postNotificationName("renew", object: nil)
票数 2
EN

Stack Overflow用户

发布于 2019-11-27 20:43:58

有一种“偷偷摸摸”的方法可以做到这点。

如果您使用:

代码语言:javascript
复制
tableView.beginUpdates()
tableView.endUpdates()

不会重新加载任何单元格,但会触发heightForRowAt,单元格将自行调整大小。

致谢于Hamish Rickerby (blog)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30991147

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档