UIView从xib加载为子视图:如何正确设置框架/大小?

时间:2011-06-12 18:38:23

标签: iphone objective-c uiview

我的iphone应用程序存在一个小问题(即使我之前已经完成了Objective-c,我对iphone编程也很陌生)。

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

问题:FooViewController控制的视图不使用其超级视图的帧。

我试图添加:

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

  • [[[FooViewController sharedController] view] setFrame:centerView.frame]当我将视图添加到centerview([centerView addSubView:[[FooViewController sharedController] view]])时(我在此行之前和之后尝试过)

但我无法获得良好的行为(即良好的规模)。有很多问题与这类问题有关,但我无法在其中找到答案:

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

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

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

另一个可以尝试此操作的地方是viewWillAppear:方法。很可能那时你的视图的超级视图已经正确设置了。