当子视图内在内容大小发生更改时,自行调整大小的uitableviewcell不会重新计算内容大小

时间:2015-03-10 03:21:27

标签: uitableview swift

每个人,我都有关于uitableviewcell的问题

自定义uitableview单元格,其中包含子视图,其中一个是名为CustomIntrinsicImageView的自定义图像视图,代码如下:

class CustomIntrinsicImageView: UIImageView {
    var _preferredMaxLayoutWidth: CGFloat!
    var preferredMaxLayoutWidth: CGFloat! {
        get {
             return _preferredMaxLayoutWidth
        }

        set {
             _preferredMaxLayoutWidth = newValue
            invalidateIntrinsicContentSize()
        }
    }
    override func intrinsicContentSize() -> CGSize {
        if let size = image?.size {
            let width: CGFloat
            let height: CGFloat

            if let maxLayoutWidth = preferredMaxLayoutWidth where size.width > maxLayoutWidth {
                width = maxLayoutWidth
                height = maxLayoutWidth * size.height/size.width
           } else {
                width = size.width
                height = size.height
           }

           return CGSizeMake(width, height)
       }

        return CGSizeMake(UIViewNoIntrinsicMetric, UIViewNoIntrinsicMetric)
    }
}

子视图对单元格有布局约束,图像视图更新单元格layoutSubview主体中的preferredMaxLayoutWidth,代码如下

override func layoutSubviews() {
    super.layoutSubviews()

    image.preferredMaxLayoutWidth = CGRectGetWidth(contentView.bounds) - CGFloat(leftMarginImage + rightMarginImage)

}

自定义图像视图的结果是完美的,但单元格不会重新计算高度。

像UILable一样的系统UI,UITextView有自己的instrinsicContentSize工具,与单元格配合好

所以,问题是如何向单元格发送信息,并让它知道子视图内容大小有变化并重新计算高度

感谢

0 个答案:

没有答案