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

alv*_*123 2 cocoa-touch ios cgrect swift

我不明白,不同的是在什么UIView之间frame.heightframe.size.height.为什么要加size?例如:

override func viewDidLoad() {
    super.viewDidLoad()

    scrollView.contentSize.height = self.view.frame.height
    scrollViewHeight = scrollView.frame.size.height
}
Run Code Online (Sandbox Code Playgroud)

rma*_*ddy 9

这一切都始于Objective-C和CGRect.它只有两个属性 - originsize.size是一个CGSize反过来height有财产.所以在Objective-C中常见的是使用以下方法获取帧的高度:

CGFloat height = frame.size.height;
Run Code Online (Sandbox Code Playgroud)

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

CGFloat height = CGRectGetHeight(frame);
Run Code Online (Sandbox Code Playgroud)

然后斯威夫特出现并CGRect成为斯威夫特struct.虽然它也有一个size属性,而这个属性CGSize又有一个height属性,Swift CGRect有一个height属性.在Swift中,上面的两行成为:

let height = frame.size.height;
Run Code Online (Sandbox Code Playgroud)

let height = frame.height;
Run Code Online (Sandbox Code Playgroud)

在大多数情况下,获得帧高度的两种方法之间没有区别.但是如果框架具有负高度则存在差异.

例:

let rect = CGRect(x: 0, y: 0, width: 320, height: -40)
print(rect.height) // 40
print(rect.size.height) // -40
Run Code Online (Sandbox Code Playgroud)

访问size.height提供CGRect创建时使用的原始值.Access height提供高度的标准化值.

在大多数情况下,您应该使用该height属性而不是size.height.但更重要的是,要保持一致.您问题中的代码不一致.

  • 还有另一个很大的不同.`rect.height`只是一个吸气剂.要改变高度,你必须使用`rect.size.height`. (2认同)