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