Utilizing Intrinsic Content Size

suggest change

When creating a UIView subclass, intrinsic content size helps to avoid setting hardcoded height and width constraints

a basic glimpse into how a class can utilize this

class ImageView: UIView {

var image: UIImage { didSet { invalidateIntrinsicContentSize() } } // omitting initializers // convenience init(image: UIImage)

override func intrinsicContentSize() -> CGSize { return CGSize(width: image.size.width, height: image.size.height) }

}

If you only want to provide one size intrinsically, you can provide the value UIViewNoIntrinsicMetric for the value that you wish to ignore.

override func intrinsicContentSize() -> CGSize {
     return CGSize(width: UIViewNoIntrinsicMetric, height: image.size.width)   
 }

Benefits when using with AutoLayout and Interface Builder

One could take this ImageView (or UIImageView) and set the horizontal alignment to superview center X and the vertical alignment to superview center Y.

Interface builder will complain to you at this point giving the following warning:

This is where Placeholder Intrinsic Size comes in.

Going into the Size inspector panel, and down to the Intrinsic Size dropdown, you can switch this value from Default to Placeholder.

and now interface builder will remove the previous warnings and you can use this size to have dynamically sized views laid out in interface builder.

Feedback about page:

Feedback:
Optional: your email if you want me to get back to you:



Table Of Contents