利用內在內容大小
在建立 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.
介面構建器將在此時向你發出警告,提出以下警告:
這就是 Placeholder Intrinsic Size
的用武之地。
進入大小檢查器面板,然後進入內在大小下拉選單,可以將此值從預設切換為佔位符。
現在,介面構建器將刪除以前的警告,你可以使用此大小來在介面構建器中顯示動態大小的檢視。