您不能直接更改 UINavigationController 或其子视图的大小,因为 UINavigationController 会自动将它们调整为全屏,无论它们的框架设置为什么。到目前为止,我能够克服这个问题的唯一方法如下:
首先,像平常一样创建 UINavigationController 的实例:
UINavigationController *nc = [[UINavigationController alloc] init];
self.navController = nc;
[nc release];
然后,创建一个 UIView 实例,限制为您真正想要的大小:
UIView *navView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, DESIRED_HEIGHT)];
navView.clipsToBounds = YES;
[navView addSubview:self.navController.view];
[self.view addSubview:navView];
[navView release];
navView 的 ClipsToBounds 属性必须设置为 YES,否则 UINavigationController 及其视图仍将全屏显示。然后,将 UINavigationController 添加到该约束视图。然后可以将此 UIView 添加到 UIViewController 的视图中,如上所示。
需要注意的是,添加到 UINavigationController 的任何 UIViewController 的视图都将其内容限制在 navView 的边界,而不是添加到 UINavigationController 的子视图的框架,因此应该创建每个子视图中的内容,以便正确显示navView 的边界。
无论如何,这种技术确实有效,因为我已经创建了一个成功使用它的应用程序。我让它工作的唯一另一种方法是从头开始创建一个自定义导航控制器类,复制 UINavigationController 的功能,但没有自动调整大小(我过去也这样做过),这可以是一种痛苦。希望这可以帮助。