利用內在內容大小

在建立 UIView 子類時,內在內容大小有助於避免設定硬編碼的高度和寬度約束

一個類如何利用這一點的基本一瞥

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)
    }
}

如果你只想本質地提供一個大小,則可以為要忽略的值提供值 UIViewNoIntrinsicMetric

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

與 AutoLayout 和 Interface Builder 一起使用時的好處

可以使用此 ImageView(或 UIImageView)並將水平對齊設定為超檢視中心 X,並將垂直對齊設定為超檢視中心 Y.

StackOverflow 文件

介面構建器將在此時向你發出警告,提出以下警告:

StackOverflow 文件

這就是 Placeholder Intrinsic Size 的用武之地。

進入大小檢查器面板,然後進入內在大小下拉選單,可以將此值從預設切換為佔位符

StackOverflow 文件

現在,介面構建器將刪除以前的警告,你可以使用此大小來在介面構建器中顯示動態大小的檢視。