利用内在内容大小
在创建 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
的用武之地。
进入大小检查器面板,然后进入内在大小下拉列表,可以将此值从默认切换为占位符。
现在,界面构建器将删除以前的警告,你可以使用此大小来在界面构建器中显示动态大小的视图。