UIViewController或UINavigationController是否设置了它的视图大小?

时间:2011-10-18 20:00:10

标签: iphone ios uiview uiviewcontroller uinavigationcontroller

我有几个UIViewControllers,通过UINavigationController加载,我在其中覆盖loadView,并设置要显示的自定义视图。我在设置某些子视图的帧时遇到问题,也许是视图本身。我认为UINavigationController或UIViewController能够强制它的视图在显示时填满屏幕。

我想知道是否和/或何时设置了视图的大小。如果它正在发生,它是设置视图的框架,还是以另一种方式。

感谢。

更新: 我刚刚注意到,在使用这个loadView方法时,我正在创建一个新的UINavigationController:

- (void)loadView
{
  UIView *view = [[UIView alloc] initWithFrame:CGRectMake(10.0f, 10.0f, 10.0f, 10.0f)];
  [view setBackgroundColor:[UIColor redColor]];
  self.view = view;
  [view release];
}

除了状态栏和标题之外,我得到一个占据整个屏幕的红色视图。我的视图什么时候调整大小以填满屏幕?在创建视图时我应该使用多大的尺寸?

2 个答案:

答案 0 :(得分:9)

UINavigationController会在推送时自动调整ViewController的视图大小。来自文档:

  

pushViewController:animated:

     

viewController参数中的对象成为导航堆栈上的顶视图控制器。推送视图控制器会导致显示其管理的视图。如何显示该视图由动画参数确定。如果动画参数为YES,则将视图设置为动画到位;否则,视图只是显示在原位。在显示之前,视图会自动调整大小以适合导航栏和工具栏(如果存在)。

如果您希望显示较小的视图,则必须创建一个容器并使其成为VC视图的子容,并手动设置大小。可能必须正确设置自动调整大小的掩码,具体取决于您创建视图的方式。

答案 1 :(得分:3)

UIViewControllers的框架空间变得更小,因为UINavigationController通过添加UINavigationBar来操纵视图,其大小为44.0f。

它会调整大小,因为您将视图替换为self.view = view;如果您使用了addSubview:,那么它将保留原始大小。 logancautrell解释了何时以及为何。