具有在UITableView中加载图像的scrollview的单元格的动态行高

时间:2015-03-22 19:24:00

标签: ios uitableview swift

在UITablView中对于包含图像的行,如何确定合适的高度。

对于表中的其他行,可以让它们自动表示自己的行。我在单元格中有一个滚动视图,一旦我从网址获取图像,就会动态添加imageView。

高度(使用autolayout)返回UITableViewAutomaticDimension heightForRowAtIndexPath。

我的imageViewCell代码如下所示

class ImageTableViewCell: UITableViewCell {
    var imageURL: NSURL? {
        didSet {
            cellImage = nil
            fetchImage()
        }
    }
    func viewForZoomingInScrollView(scrollView: UIScrollView) -> UIView? {
        return imageView
    }
    @IBOutlet weak var scrollView: UIScrollView!{
        didSet {
            scrollView.contentSize = cellImageView.frame.size
            scrollView.minimumZoomScale = 0.03
            scrollView.maximumZoomScale = 1.0
            scrollView.zoomScale = 1.0;
        }
    }
    @IBOutlet weak var spinner: UIActivityIndicatorView!
    private func fetchImage() {
        if let url = imageURL {
            spinner?.startAnimating()
            let qos = Int(QOS_CLASS_USER_INITIATED.value)
            dispatch_async(dispatch_get_global_queue(qos, 0)) {
                () -> Void in
                let imageData = NSData(contentsOfURL: url)
                dispatch_async(dispatch_get_main_queue()) {
                    if url == self.imageURL {
                        if imageData != nil {
                            self.cellImage = UIImage(data: imageData!)
                        } else {
                            self.cellImage = nil
                        }
                    }
                }
            }
        }
    }
    private var cellImageView = UIImageView()
    private var cellImage: UIImage? {
        get { return cellImageView.image }
        set {
            cellImageView.image = newValue
            cellImageView.sizeToFit()
            scrollView?.contentSize = cellImageView.frame.size
            spinner?.stopAnimating()
        }
    }
}

1 个答案:

答案 0 :(得分:0)

只需从您的单元格中获取imageView中的图像,然后获取图像的高度并在heightForRowAtIndexPath中使用它:

var cellHeight = cell.yourImageView.image?.size.height