UIView的frame.height和frame.size.height有什么区别?

What's the difference between UIView's frame.height and frame.size.height?

我不明白 frame.heightframe.size.height 之间的 UIView 有什么区别。为什么要加size?例如:

override func viewDidLoad() {
    super.viewDidLoad()

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

一切都始于 Objective-C 和 CGRect。它只有两个属性 - originsizesize 是一个 CGSize,它又是一个 height 属性。所以在 Objective-C 中使用以下方法获取框架的高度很常见:

CGFloat height = frame.size.height;

从技术上讲,正确的解决方案(获得适当的标准化高度)是使用:

CGFloat height = CGRectGetHeight(frame);

然后Swift出现了,CGRect变成了Swiftstruct。虽然它也有一个类型为 CGSizesize 属性,后者又有一个 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。但更重要的是,要保持一致。你问题中的代码不一致。