Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 什么';UIView和x27之间的区别是什么;s frame.height和frame.size.height?_Ios_Swift_Cocoa Touch_Cgrect - Fatal编程技术网

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
变成了Swift
struct
。虽然它还具有
CGSize
类型的
size
属性,该属性又具有
height
属性,但Swift
CGRect
具有
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
时使用的原始值。Access
height
提供高度的标准化值


在大多数情况下,您应该使用
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