自定义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工具,与单元格配合好所以,问题是如何向单元格发送信息,并让它知道子视图内容大小有变化并重新计算高度
感谢