2011-04-13 53 views
1

我有以下设置。UIViewController框架

带有UIScrollView的pagingScrollViewController,因为它的视图(self.view = scrollView)。 在该scrollView中,我将一个rootViewController的视图添加为子视图。 rootViewController的视图是一个UIView,我在其上添加一个或另一个视图(取决于内部逻辑)。

UIScrollView被初始化为一个等于applicationFrame的框架,所以0,20,320,460。由于状态栏位于顶部,所以这很好。

将rootViewController的视图添加到滚动视图时出现问题。在rootViewController的创建过程中,它的视图是在-loadView中设置的,在我的情况下它仍然被注释掉。所以标准的appel loadView被处理。

它给了我一个也有0帧的视图,,320,460.这不是我想看到的,因为现在rootViewController的视图是从顶部删除了40个像素实际的iPhone屏幕。

现在,这当然很容易通过在-loadView中手动设置rootViewControllers视图或为其指定一个帧,其中y在-viewDidLoad中设置为0;

但我无法想象这就是苹果公司打算完成此任务的方式。我没有使用接口生成器,所以也许这就是问题所在,苹果打算使用IB,但是我固执地研究这个主题:)

我是否以错误的方式使用viewControllers?这似乎是将scrollView的逻辑从另一个视图的逻辑中分离出来的好方法。

将第二个UIViewController的视图添加到第一个UIViewController的视图的正确方法是什么?其中第一个viewController.view接收一个0,20,320,460的帧。而第二个controller.view一个帧0,0,320,460(所以基本上是第一个controller.view的边界)

这里有很多使用单词控制器和视图,希望问题很明显。

+0

如何初始化rootViewController的视图框架? – Ravin 2011-04-13 11:39:45

+0

我不是,那是工作中的魔法*。如果您不覆盖-loadView,系统会为您创建一个视图。不幸的是,一帧0,20,320,460。 – DIJ 2011-04-13 12:01:45

+0

那就是答案本身。你的rootViewController有系统提供的0,20,320,460帧。所以当你将它添加到你认为正常的视图中时,它会相对较低,y = 20。 – Ravin 2011-04-13 12:06:15

回答

1

回答我的问题...

猎食是正确的。 在阅读loadView方法和apple's view controller programming guide之后,我得出结论:这是系统的默认行为。如果你想要其他的东西,重写-loadView并自己动手。其实苹果声明,如果你不使用NIB,你应该重写-loadView来创建至少一个基本的简单视图。