UIView的frame.height和frame.size.height有什么区别?
What's the difference between UIView's frame.height and frame.size.height?
我不明白 frame.height
和 frame.size.height
之间的 UIView
有什么区别。为什么要加size
?例如:
override func viewDidLoad() {
super.viewDidLoad()
scrollView.contentSize.height = self.view.frame.height
scrollViewHeight = scrollView.frame.size.height
}
一切都始于 Objective-C 和 CGRect
。它只有两个属性 - origin
和 size
。 size
是一个 CGSize
,它又是一个 height
属性。所以在 Objective-C 中使用以下方法获取框架的高度很常见:
CGFloat height = frame.size.height;
从技术上讲,正确的解决方案(获得适当的标准化高度)是使用:
CGFloat height = CGRectGetHeight(frame);
然后Swift出现了,CGRect
变成了Swiftstruct
。虽然它也有一个类型为 CGSize
的 size
属性,后者又有一个 height
属性,但 Swift CGRect
有一个 height
属性。在Swift中,上面两行变为:
let height = frame.size.height;
和
let height = frame.height;
在大多数情况下,这两种获取框架高度的方法没有区别。但是如果frame的高度是负数,那就有区别了。
示例:
let rect = CGRect(x: 0, y: 0, width: 320, height: -40)
print(rect.height) // 40
print(rect.size.height) // -40
访问 size.height
给出创建 CGRect
时使用的原始值。 Access height
给出高度的归一化值。
在大多数情况下,您应该使用 height
属性 而不是 size.height
。但更重要的是,要保持一致。你问题中的代码不一致。
我不明白 frame.height
和 frame.size.height
之间的 UIView
有什么区别。为什么要加size
?例如:
override func viewDidLoad() {
super.viewDidLoad()
scrollView.contentSize.height = self.view.frame.height
scrollViewHeight = scrollView.frame.size.height
}
一切都始于 Objective-C 和 CGRect
。它只有两个属性 - origin
和 size
。 size
是一个 CGSize
,它又是一个 height
属性。所以在 Objective-C 中使用以下方法获取框架的高度很常见:
CGFloat height = frame.size.height;
从技术上讲,正确的解决方案(获得适当的标准化高度)是使用:
CGFloat height = CGRectGetHeight(frame);
然后Swift出现了,CGRect
变成了Swiftstruct
。虽然它也有一个类型为 CGSize
的 size
属性,后者又有一个 height
属性,但 Swift CGRect
有一个 height
属性。在Swift中,上面两行变为:
let height = frame.size.height;
和
let height = frame.height;
在大多数情况下,这两种获取框架高度的方法没有区别。但是如果frame的高度是负数,那就有区别了。
示例:
let rect = CGRect(x: 0, y: 0, width: 320, height: -40)
print(rect.height) // 40
print(rect.size.height) // -40
访问 size.height
给出创建 CGRect
时使用的原始值。 Access height
给出高度的归一化值。
在大多数情况下,您应该使用 height
属性 而不是 size.height
。但更重要的是,要保持一致。你问题中的代码不一致。