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

Rya*_*yan 5 iphone uiviewcontroller uiview uinavigationcontroller ios

我有几个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];
}
Run Code Online (Sandbox Code Playgroud)

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

log*_*ell 9

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

pushViewController:动画:

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

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

  • 是否有任何方法可以强制导航控制器在推送操作后重新调整其子视图控制器的大小?我正在改变导航控制器的高度,但由于某种原因它不会自动调整其内容. (2认同)

Wol*_*ert 3

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

它会调整大小,因为您将视图替换为“self.view = view;如果您本来会使用它”,addSubview:那么它会保持原始大小。logancautrell 解释了时间和原因。