假设您的屏幕上有一个 UIView,仅此而已。它没有嵌套在其他一些 UIView 中,没有超级视图,它孤独地存在。
那么它的 frame 属性变成了什么?
我在这里找到的框架定义:“视图的框架是其矩形在父视图坐标系中的位置。”
假设您的屏幕上有一个 UIView,仅此而已。它没有嵌套在其他一些 UIView 中,没有超级视图,它孤独地存在。
如果一个视图是可见的,它必须有一个超级视图。UIWindow
也是一个UIView
(它派生自`UIView),所以如果你将它添加到你的主窗口,它仍然是一个超级视图的子视图。
现在,如果您阅读UIWindow
参考:
UIWindow 类定义了一个称为窗口的对象,它管理和协调应用程序在设备屏幕上显示的视图。
或在这里:
在 iOS 中,window 对象包含应用程序的视图并管理它们在设备显示屏上的呈现。窗口的关联屏幕对象代表当前使用的特定设备显示。如果
因此,UIWindow
框架是根据显示坐标系定义的。
并来自UIScreen
参考:
UIScreen 对象包含设备整个屏幕的边界矩形。在设置应用程序的用户界面时,您应该使用该对象的属性来为应用程序的窗口获取推荐的框架矩形。
一般来说,什么是视图的框架取决于视图及其创建方式。创建视图时,通常使用:
[[UIView alloc] initWithFrame:...];
因此,视图的框架是传递的CGRect
参数,即使视图没有添加到任何父视图。
当您addSubview
将该视图添加到其他视图时,您在实例化它时指定的信息将用于确定添加的视图在父视图坐标系中的位置。
换句话说,UIView 的框架只是视图的一个属性;当必须显示视图时,此属性被解释为视图在其父视图内的几何位置。
此外,视图的框架不会仅仅通过将其从其父视图中移除而改变。它保持不变,以防您再次将其添加到视图中。(感谢H2CO3的评论)
希望这可以帮助。
如果您在屏幕上有一个 UIView,它至少会在您的应用程序的主 UIWindow 中。所以你的第一个视图控制器的 UIVIew 将在主 UIWindow 的框架内。