我有几个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];
}
除了状态栏和标题之外,我得到一个占据整个屏幕的红色视图。我的视图什么时候调整大小以填满屏幕?在创建视图时我应该使用多大的尺寸?
答案 0 :(得分:9)
UINavigationController会在推送时自动调整ViewController的视图大小。来自文档:
pushViewController:animated:
viewController参数中的对象成为导航堆栈上的顶视图控制器。推送视图控制器会导致显示其管理的视图。如何显示该视图由动画参数确定。如果动画参数为YES,则将视图设置为动画到位;否则,视图只是显示在原位。在显示之前,视图会自动调整大小以适合导航栏和工具栏(如果存在)。
如果您希望显示较小的视图,则必须创建一个容器并使其成为VC视图的子容,并手动设置大小。可能必须正确设置自动调整大小的掩码,具体取决于您创建视图的方式。
答案 1 :(得分:3)
UIViewControllers
的框架空间变得更小,因为UINavigationController
通过添加UINavigationBar
来操纵视图,其大小为44.0f。
它会调整大小,因为您将视图替换为self.view = view;
如果您使用了addSubview:
,那么它将保留原始大小。 logancautrell解释了何时以及为何。