使用 pushViewController 然后 popViewController 时将工具栏保持在 UIView 的顶部?

Posted

技术标签:

【中文标题】使用 pushViewController 然后 popViewController 时将工具栏保持在 UIView 的顶部?【英文标题】:Keep Toolbar at top of UIView when using pushViewController and then popViewController? 【发布时间】:2011-04-16 11:05:30 【问题描述】:

更新:此问题的另一个解决方案是导航控制器根级别的导航栏是否可以透明或不显示。有没有办法让导航控制器根级别的导航栏透明或不显示?

我的*** UIView 顶部有一个带有工具栏的 NIB,工具栏下方是一个 tableView。当我在 navigationController 上使用 pushViewController 将另一个 UIViewController 推送到 navigationController 上时,工具栏被导航栏覆盖。当我将当前视图弹出回根视图时,无法看到工具栏,因为顶部有一个空白栏。现在,工具栏和 tableView 顶部之间也有大约工具栏大小的间隙。所以视图从顶部看起来像: 1) 阴影空白条, 2)关于工具栏大小的空白, 3) 表格视图

如何让***NIB的工具栏在使用popViewController后出现在UIView的顶部?

在顶层视图中,我实例化了一个 UINavigationController:

 self.navigationController = [[UINavigationController alloc] initWithRootViewController:ListsController];

然后在 didSelectRowAtIndexPath 中推送一个视图控制器

ItemsController * Items  = [[ItemsController alloc] 
                                         initWithNibName:@"Items" bundle:nil] ;
[self.navigationController pushViewController:Items animated:YES];

要显示初始推送视图,我执行以下操作:

UIView *navView = self.navigationController.view;
CGRect navFrame = navView.frame;
//  navFrame.origin.y -= 20;
navView.frame = navFrame;

AppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];
UIWindow *appWindow = appDelegate.window;


[appWindow addSubview:navView];

知道如何在弹出回到顶层时不覆盖顶层工具栏吗?

【问题讨论】:

【参考方案1】:

解决方案是使用以下命令将导航栏隐藏在根级别:

- (void)viewWillAppear:(BOOL)animated 
[[self navigationController] setNavigationBarHidden:YES animated:YES];

[super viewWillAppear:animated];
[self.table reloadData];

然后在导航堆栈的下一个较低级别,使导航栏不隐藏:

- (void)viewWillAppear:(BOOL)animated 
[[self navigationController] setNavigationBarHidden:NO animated:YES];

[super viewWillAppear:animated];
[self.table reloadData];

【讨论】:

以上是关于使用 pushViewController 然后 popViewController 时将工具栏保持在 UIView 的顶部?的主要内容,如果未能解决你的问题,请参考以下文章

直到 pushViewController 才应用外观更改

pushViewController 在不同场景中调用时会导致不同的行为

单击行后立即使 pushViewController 转换

UITableView 在滚动中,在 UINavigationController 内部不能 pushViewController

来自 Prototype Cell 的 pushViewController

pushViewController 在多个标签应用程序中啥都不做?