Ios 什么';UIView和x27之间的区别是什么;s frame.height和frame.size.height?
我不明白Ios 什么';UIView和x27之间的区别是什么;s frame.height和frame.size.height?,ios,swift,cocoa-touch,cgrect,Ios,Swift,Cocoa Touch,Cgrect,我不明白ui视图中frame.height和frame.size.height之间有什么区别。为什么要添加尺寸?例如: override func viewDidLoad() { super.viewDidLoad() scrollView.contentSize.height = self.view.frame.height scrollViewHeight = scrollView.frame.size.height } 这一切都是从Objective-C和CGR
ui视图中frame.height
和frame.size.height
之间有什么区别。为什么要添加尺寸
?例如:
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
属性,但SwiftCGRect
具有height
属性。在Swift中,上面的两行变为:
let height = frame.size.height;
及
在大多数情况下,获取框架高度的两种方法没有区别。但如果框架的高度为负,则会有差异
例如:
let rect = CGRect(x: 0, y: 0, width: 320, height: -40)
print(rect.height) // 40
print(rect.size.height) // -40
访问size.height
提供创建CGRect
时使用的原始值。Accessheight
提供高度的标准化值
在大多数情况下,您应该使用height
属性,而不是size.height
。但更重要的是,要始终如一。您问题中的代码不一致。还有一个很大的区别rect.height
只是一个getter。要更改高度,必须使用rect.size.height
@Sulthan Good point。我专注于获取高度,而忽略了设置高度。
let rect = CGRect(x: 0, y: 0, width: 320, height: -40)
print(rect.height) // 40
print(rect.size.height) // -40