使用 UINavigationController 工具栏的替代方法

Posted

技术标签:

【中文标题】使用 UINavigationController 工具栏的替代方法【英文标题】:Alternatives to using UINavigationController toolbar 【发布时间】:2013-11-15 04:20:28 【问题描述】:

我有一个带有多个视图的应用程序,它使用导航控制器。在某些视图上,我需要一个带有与该视图相关的按钮的工具栏。虽然我已经成功地将自定义按钮添加到某些视图的工具栏,但我在维护这些工具栏的状态时遇到了一个大问题。例如,当导航到具有自定义工具栏的视图时,应用程序中的所有其他视图似乎都继承了该工具栏的状态。例如,视图“A”需要一个带有按钮“X”的工具栏。这按计划工作。但是,当导航到视图“B”时,视图 A 的工具栏会加载到视图 B 中。

我尝试取消配置 viewDidDisappear 上的工具栏,但结果有限。使用此方法时,删除自定义项目存在延迟。例如,当导航到另一个视图时,按钮在下一个视图加载之前不会消失。

真的,我所需要的只是一个工具栏,它位于视图的底部,并且在用户滚动视图时不会滚动。似乎实现这一点的唯一方法是将其锁定到导航控制器的工具栏中。但是,这种方法会产生许多其他问题,包括上述问题。

再次,我正在寻找的行为是有一个工具栏,它始终位于视图的底部,并且独立于视图/表格视图的滚动。有没有办法在不使用导航控制器的情况下实现这一点?谢谢!

【问题讨论】:

您能稍微澄清一下您的应用程序结构吗?您是否有一个导航控制器作为根视图控制器,以及您在控制器之间的推送和弹出(如您在几个地方所说的没有滚动)?你在哪里添加工具栏?对每个控制器?到导航控制器? 是的,我有一个导航控制器作为根视图控制器。如果用户滚动视图,我希望自定义工具栏保持在视图中。我将工具栏添加到每个视图控制器的导航栏 1.我认为您需要的是 TabbarController 2。您可以使用 ViewController 和 TableView 而不是 TableViewController 来约束可滚动区域。 保持什么观点?您希望 A 的工具栏保留在 A 中,而 B 的工具栏保留在 B 中吗?再次,生病询问滚动。您实际上是在滚动(使用 UIScrollView),还是在谈论通过毛绒和流行音乐获得的过渡? 我不明白你为什么会遇到问题。如果您将工具栏添加到 A,并将不同的工具栏添加到 B,那么当您在它们之间来回导航时,工具栏会保留在它们各自的控制器中。我已经对此进行了测试,但我没有看到您遇到的问题。 【参考方案1】:

这是我的解决方案:在 ViewController 中实现这些方法。

 - (void)viewDidLoad
 
     self.navigationController.toolbarHidden = NO;
 

 - (void)viewDidAppear:(BOOL)animated
 
     self.navigationController.toolbarHidden = NO;
     [super viewDidAppear:animated];
 

 - (void)viewWillDisappear:(BOOL)animated
 
     self.navigationController.toolbarHidden = YES;
     [super viewWillDisappear:animated];
 

 - (void)viewDidDisappear:(BOOL)animated
 
     self.navigationController.toolbarHidden = YES;
     [super viewDidDisappear:animated];
  

【讨论】:

【参考方案2】:

您在寻找此属性:hidesBottomBarOnPush(在 SB 上可用)?您在除 A 之外的每个 导航控制器 视图上将此属性设置为 YES。

【讨论】:

以上是关于使用 UINavigationController 工具栏的替代方法的主要内容,如果未能解决你的问题,请参考以下文章

UINavigationcontroller 中未使用的视图会发生啥?

使用 push segue 时 UINavigationController 是不是强制

UINavigationController - 使用 UIBlurEffect 清除背景

一起使用 UITabBarController 和 UINavigationController

iPhone - UINavigationController - 使用 CATransaction 自定义动画

如何在 SwiftUI 中使用 UINavigationController