非全屏UINavigationController

Jak*_*čar 10 iphone cocoa-touch objective-c

是否可以以不使用完整窗口的方式使用UINavigationController?

我已经尝试设置它的视图框架,并将其视图添加到另一个(非全屏)视图而不是窗口,似乎都不起作用.

Ash*_*win 6

您无法直接更改UINavigationController或其子视图的大小,因为UINavigationController会自动将它们调整为全屏,无论它们的帧设置如何.到目前为止,我能够克服这个问题的唯一方法如下:

首先,像往常一样创建UINavigationController的实例:

UINavigationController *nc = [[UINavigationController alloc] init];
self.navController = nc;
[nc release];
Run Code Online (Sandbox Code Playgroud)

然后,创建一个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];
Run Code Online (Sandbox Code Playgroud)

navView的clipsToBounds属性必须设置为YES,否则UINavigationController及其视图仍将显示为全屏.然后,将UINavigationController添加到该约束视图.然后可以将此UIView添加到UIViewController的视图中,如上所示.

需要注意的是,添加到UINavigationController的任何UIViewController视图都将其内容限制为navView的边界,而不是添加到UINavigationController的子视图的框架,因此应创建每个子视图中的内容以正确显示navView的界限.

无论如何,这项技术确实有效,因为我已经创建了一个成功使用它的应用程序.我实现这一目标的唯一另一种方法是从头开始创建一个自定义导航控制器类,复制UINavigationController的功能,但没有自动调整大小(我过去也做过),这可能是痛苦 希望这可以帮助.


Dou*_*ugW 0

这可能有帮助吗?

添加 UINavigationController 作为 UIView 的子视图

您始终可以直接使用 UINavigationBar 类,并自己实现控制代码。