【发布时间】:2011-08-04 15:07:22
【问题描述】:
我有以下设置。
一个带有 UIScrollView 的 pagingScrollViewController 作为它的视图 (self.view = scrollView)。 在该滚动视图中,我将 rootViewController 的视图添加为子视图。 rootViewController 的视图是一个 UIView,我在其上添加一个或另一个视图(取决于内部逻辑)。
UIScrollView 使用等于 applicationFrame 的帧进行初始化,因此为 0、20、320、460。这很好,因为顶部有状态栏。
将rootViewController的视图添加到滚动视图时出现问题。在 rootViewController 的创建过程中,它的视图是在 -loadView 中设置的,在我的例子中它仍然被注释掉。这样标准的appel loadView就处理好了。
它给了我一个视图,它也有一个 0、20、320、460 的帧。这不是我想看到的那样,因为现在 rootViewController 的视图被删除了 40 像素从实际 iPhone 屏幕的顶部。
现在,通过在 -loadView 中手动设置 rootViewControllers 视图或在 -viewDidLoad 中为其分配 y 设置为 0 的框架,这当然很容易解决;
但我无法想象这是苹果打算这样做的方式。我没有使用 Interface builder,所以也许这就是问题所在,苹果打算让我使用 IB,但我在这个问题上很固执:)
我是否以错误的方式使用 viewControllers?这似乎是将scrollView的逻辑与其他视图的逻辑分开的好方法。
将第二个 UIViewController 的视图添加到第一个 UIViewController 的视图中的正确方法是什么?其中第一个 viewController.view 接收到 0、20、320、460 的帧。而第二个 controller.view 接收到 0、0、320、460 的帧(所以基本上是第一个 controller.view 的边界)
其中有很多使用控制器和视图这个词,但希望问题很清楚。
【问题讨论】:
-
你是如何初始化 rootViewController 的视图框架的?
-
我不是,这就是魔法在起作用。如果您不覆盖 -loadView,系统会为您创建一个视图。不幸的是,帧为 0,20,320,460。
-
这就是答案本身。您的 rootViewController 具有系统提供的帧 0,20,320,460。因此,当您将其添加到正常的视图时,y=20 会相对较低。
-
注意:“在该滚动视图中,我将 rootViewController 的视图添加为子视图”。 Apple 声明:显示的屏幕只有一个视图控制器。如果您的 pagingScrollView 控制器不属于 rootViewController 您将收到级别 = 2 的内存警告。
-
@inovaction...感谢您的提示!
标签: iphone ios uiview uiviewcontroller uiscrollview