2011-06-12 29 views
0

我的iphone应用程序出现了一个小问题(即使我之前已经完成了objective-c,我对于iphone programmation也很陌生)。作为子视图从xib加载的UIView:如何正确设置框架/大小?

我在我的主窗口中有一个名为centerView的UIView。 我创建了一个与xib文件链接的UIViewController(我们称之为FooViewController)的单例子类。我的目标是将关联视图作为子视图(centerView使用centerView的整个框架)加载。

问题:由FooViewController控制的视图不使用其超视图的框架。

我已尝试添加:

  • self.view.frame = self.view.superview.frame在initWithNib的 “自定义初始化” 的一部分......方法FooViewController

  • [[[FooViewController sharedController] view] setFrame:centerView.frame],当我添加视图CENTERVIEW([centerView addSubView:[[FooViewController sharedController] view]]) (我曾试过这条线前后)

但我不能得到好的行为(即g ood大小)。有这样的问题有多个问题,但我无法找到我的答案在他们如此:

  • 你知道我该如何解决这个问题吗?
  • [可选]与xib链接的UIViewController的实例是如何工作的?必须有一个资源文件,其中指出了xib的名称?或者,它可能会寻找与班级同名的xib吗?

在此先感谢您的帮助。

回答

1

从NIB加载时,视图将加载到视图控制器的loadView方法中,而不是在初始化程序中。既然你不应该真的重写loadView,尤其是。如果您从NIB加载它,则应该尝试在视图控制器的viewDidLoad方法中执行#1(self.view.frame = self.view.superview.frame)。当然,你应该确保在你执行这个语句时视图被添加到了超级视图中。您还需要确保超级视图的框架在此时已正确设置。

另一个可以试试的地方是viewWillAppear:方法。很可能你的观点的超级观点已经正确设定。

+0

非常感谢您的回答。我试图把有关框架设置的代码放在viewWillAppear中,但它似乎确实做了任何事情。实际上问题来自另一部分:即使在viewWillAppear中,superview也是null(但self.view.superview.frame不会创建任何段错误...)。我会研究这一点。 – ThR37 2011-06-12 21:47:48

+0

在obj-c中,如果接收者为零,它将接受任何方法,并返回零(我认为)。这就是为什么即使self.view.superview为零也不会出现段错误的原因。 – 2011-06-12 22:02:08

相关问题