UIView的frame.height和frame.size.height之间的区别是什么?

时间:2018-02-10 19:51:39

标签: ios swift cocoa-touch cgrect

我不明白UIViewframe.height之间frame.size.height的差异。为什么要添加size?例如:

override func viewDidLoad() {
    super.viewDidLoad()

    scrollView.contentSize.height = self.view.frame.height
    scrollViewHeight = scrollView.frame.size.height
}

1 个答案:

答案 0 :(得分:8)

这一切都始于Objective-C和CGRect。它只有两个属性 - originsizesizeCGSize,后者又有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。但更重要的是,要保持一致。您问题中的代码不一致。