【问题标题】:What's the difference between UIView's frame.height and frame.size.height?UIView的frame.height和frame.size.height有什么区别?
【发布时间】:2018-02-10 19:51:39
【问题描述】:

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

override func viewDidLoad() {
    super.viewDidLoad()

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

【问题讨论】:

    标签: ios swift cocoa-touch cgrect


    【解决方案1】:

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

    【讨论】:

    • 还有一个很大的不同。 rect.height 只是一个吸气剂。要更改高度,您必须使用rect.size.height
    • @Sulthan 好点。我专注于获取高度而忽略了设置高度。
    猜你喜欢
    • 2011-06-07
    • 2011-12-11
    • 1970-01-01
    • 1970-01-01
    • 2017-10-03
    • 2010-10-02
    • 2011-12-12
    • 2010-09-16
    相关资源
    最近更新 更多