【发布时间】:2013-08-12 14:27:09
【问题描述】:
我正在尝试为 iPad 应用创建多个视图。首先,我创建了一个菜单视图,然后根据菜单创建了一个带有坐标的子菜单视图。所以它看起来像这样:
我做了什么:
self.view = [[UIView alloc] initWithFrame:CGRectMake(self.parentViewController.view.frame.size.width, 0, 150, screenHeight)];
但现在在子菜单上,我正在尝试创建内容视图,它是一个 UINavigationController。尝试做同样的事情,我得到了这个结果:
我在做什么(这次在子菜单视图控制器上创建框架):
CGRect frame = CGRectMake(self.view.frame.origin.x + self.view.frame.size.width,
0,
[[UIScreen mainScreen] bounds].size.width - self.view.frame.origin.x - self.view.frame.size.width,
[[UIScreen mainScreen] bounds].size.height);
这是不言自明的,但是,我只是获取子菜单的原点并添加其宽度,以便获得右边缘坐标。
经过多次尝试,我设法让它工作,因为我注意到 CGRectMake 正在使用 UINavigationController 视图的中心来安排其位置。所以下面的代码:
CGRect frame = CGRectMake(self.view.frame.origin.x + self.view.frame.size.width + 259,
0,
[[UIScreen mainScreen] bounds].size.width - self.view.frame.origin.x - self.view.frame.size.width,
[[UIScreen mainScreen] bounds].size.height);
产生正确的位置。
发生了什么事?我认为 CGRectMake 原点总是在左上角,但是在这个特别的视图上实际上是中上角(或中中,不确定)。我做错了什么?
EDIT1:
这是正确位置框架的控制台输出:
注意导航栏现在是如何正确定位的:
但是 x 坐标不是 250(应该是,因为 menu.width + sub-menu.width = 250。)
EDIT2:
我最终放弃了。问题在于由 UINavigationViewController 创建的自动生成的 UINavigationBar。我似乎无法弄清楚如何配置它。如果有人知道答案,我会留下问题。
【问题讨论】:
-
这取决于您使用的视图。从技术上讲,原点始终位于 UI 元素对象的左上角。如果您让我们说另一个 UIView 对象作为您的子视图,那么您将不得不适应子视图的定位。它似乎从 self.view 的中间开始,但那是因为它会像在常规 self.view 中一样从 (0,0) 开始希望这会有所帮助
-
好吧,您必须了解什么是
frame,什么是视图层次结构(frame是相对于超级视图的左上角)以及可能还自动调整掩码大小。CGRect只是一组四个数字,没有别的。重要的是视图布局机制如何解释它。 -
@user2277872 导航栏是“自动”创建的,我只是分配并使用该框架启动了一个空白视图。这是为什么?我应该只创建一个视图来正确对齐导航栏吗?
标签: ios uiview cgrectmake