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:


UIView:
* UIView
* Utilizing Intrinsic Content Size

Table Of Contents
12 UIView
15 UIColor
26 UIImage
28 CALayer
30 NSDate
40 iBeacon
49 NSTimer
79 NSURL
87 AWS SDK
96 NSData
101 Segues
104 EventKit
105 NSBundle
106 SiriKit
111 StoreKit
117 3D Touch
119 Keychain
122 Block
141 AirDrop
144 UISlider
145 Carthage
146 HealthKit
151 plist
157 MVVM
164 UIPhoenix
166 Simulator
168 NSArray
169 OpenGL
175 Core Data
179 MyLayout
180 UIFont
189 Security
200 Codable