如果UIView没有superview,它的frame属性变成什么呢?

时间:2013-01-09 18:32:22

标签: ios uiview

假设你的屏幕上有一个UIView就是这样。它没有嵌套在其他一些UIView中,没有超级视图,它就是它的寂寞。

然后它的帧属性变成了什么?

我在这里找到的帧的定义:“视图的帧是其超视图坐标系中矩形的位置。”

2 个答案:

答案 0 :(得分:4)

  

假设你的屏幕上有一个UIView就是这样。它没有嵌套在其他一些UIView中,没有超级视图,它就是它的寂寞。

如果视图可见,则必须具有超视图。 UIWindow也是UIView(它来自`UIView),所以如果你把它添加到主窗口,它仍然是超级视图的子视图。

现在,如果您阅读UIWindow参考:

  

UIWindow类定义了一个称为窗口的对象,用于管理和协调应用在设备屏幕上显示的视图。

here

  

在iOS中,窗口对象包含应用程序的视图,并在设备显示屏上管理其演示文稿。窗口的关联屏幕对象表示当前正在使用的特定设备显示。如果

因此,UIWindow帧是根据显示坐标系定义的。

来自UIScreen reference

  

UIScreen对象包含设备整个屏幕的边界矩形。在设置应用程序的用户界面时,您应该使用此对象的属性来获取应用程序窗口的推荐框架矩形。

一般来说,视图的框架取决于视图及其创建方式。创建视图时,通常使用:

[[UIView alloc] initWithFrame:...];

因此,视图的框架是传递的CGRect参数,即使视图未添加到任何超级视图中也是如此。

当您使用addSubview将该视图添加到其他视图时,您在实例化时指定的信息将用于确定超视图坐标系中添加的视图的位置。

换句话说,UIView的框架只是视图的一个属性;当必须显示视图时,此属性将被解释为其超级视图内部视图的几何位置。

此外,视图的框架不会仅仅通过从超级视图中删除它而改变。如果再次将其添加到视图中,它将保持不变。 (感谢H2CO3的评论)

希望这有帮助。

答案 1 :(得分:1)

如果你在屏幕上有一个UIView,它至少会在你应用的主UIWindow中。因此,您的第一个视图控制器的UIVIew将位于主UIWindow的框架内。