【发布时间】:2023-03-08 09:11:01
【问题描述】:
我需要这样的屏幕:始终在顶部,有一个搜索栏,始终。正下方,有一个导航控制器。这可能吗?我已经尝试在 IB 中调整导航控制器的大小,但我无法调整它的大小。谢谢。
【问题讨论】:
标签: objective-c cocoa-touch ios uiviewcontroller uinavigationcontroller
我需要这样的屏幕:始终在顶部,有一个搜索栏,始终。正下方,有一个导航控制器。这可能吗?我已经尝试在 IB 中调整导航控制器的大小,但我无法调整它的大小。谢谢。
【问题讨论】:
标签: objective-c cocoa-touch ios uiviewcontroller uinavigationcontroller
是的。但是,您必须在代码中构建接口。你的主视图控制器应该有两个实例变量:第一个应该是搜索栏,第二个应该是导航控制器。然后,在-viewDidLoad 中,将搜索栏和导航控制器的视图作为子视图添加到主视图控制器的视图中。结果将如下所示:
您可以在这里下载 Xcode 项目:http://www.mediafire.com/?36dswv4u0le447k
【讨论】:
这并不简单,但这是可能的。你需要做的是让根视图控制器成为一个普通的视图控制器,包含一个 UIView。该视图包含搜索栏和“持有者视图”。在您将导航控制器的视图添加到窗口时,您改为将其添加到持有者视图。
我使用标准导航控制器模板创建了这个。我修改了应用委托如下:
//header
{
UIWindow *window;
UINavigationController *navigationController;
UIViewController *rootVC;
UIView *holderView;
}
@property (nonatomic, retain) IBOutlet UIWindow *window;
@property (nonatomic, retain) IBOutlet UINavigationController *navigationController;
@property (nonatomic, retain) IBOutlet UIViewController *rootVC;
@property (nonatomic, assign) IBOutlet UIView *holderView;
//implementation
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
UIView *temp;
temp = navigationController.view;
CGRect f = holderView.frame;
f.origin = CGPointZero;
temp.frame = f;
[holderView addSubview:temp];
[window addSubview:rootVC.view];
[window makeKeyAndVisible];
return YES;
}
IB 层次结构图:
【讨论】: