我不明白UIView
和frame.height
之间frame.size.height
的差异。为什么要添加size
?例如:
override func viewDidLoad() {
super.viewDidLoad()
scrollView.contentSize.height = self.view.frame.height
scrollViewHeight = scrollView.frame.size.height
}
答案 0 :(得分:8)
这一切都始于Objective-C和CGRect
。它只有两个属性 - origin
和size
。 size
是CGSize
,后者又有height
属性。因此,在Objective-C中通常使用以下方法获取帧的高度:
CGFloat height = frame.size.height;
从技术上讲,正确的解决方案(获得正确的标准化高度)是使用:
CGFloat height = CGRectGetHeight(frame);
然后斯威夫特出现了,CGRect
成了斯威夫特struct
。虽然它还具有size
类型的CGSize
属性,而height
属性又具有CGRect
属性,但Swift height
具有let height = frame.size.height;
属性。在Swift中,上面的两行变为:
let height = frame.height;
和
let rect = CGRect(x: 0, y: 0, width: 320, height: -40)
print(rect.height) // 40
print(rect.size.height) // -40
在大多数情况下,获得帧高的两种方法没有区别。但是如果框架具有负高度则存在差异。
示例:
size.height
访问CGRect
会提供创建height
时使用的原始值。访问height
给出了标准化的高度值。
在大多数情况下,您应该使用size.height
属性,而不是sudo
。但更重要的是,要保持一致。您问题中的代码不一致。