导航控制器干扰 TabBar 控制器

Posted

技术标签:

【中文标题】导航控制器干扰 TabBar 控制器【英文标题】:Navigation Controller interfering with TabBar Controller 【发布时间】:2017-01-13 01:03:42 【问题描述】:

我有一个菜单,它只是一个选项卡上的表格视图。当您选择其中一个表格单元格时,它会连接到嵌入在导航控制器中的视图控制器。我在这个导航控制器中添加了一个“完成”按钮,并创建了一个返回菜单的 segue。但是现在菜单不显示 tabBar,它现在显示一个带有“返回”按钮的导航栏。

这是菜单(标签栏的一部分)只是一个表格视图

这是点击表格视图单元格时显示的页面

这是点击“完成”后的菜单

点击完成后,我希望它返回到第一个屏幕截图中显示的菜单。我试图为此使用界面生成器,但我想我可以创建一个类并通过代码返回菜单。

任何想法如何解决这个问题?

----- 编辑-----

这是没有“完成”按钮的支持页面

----- 编辑-----

这是流程布局,抱歉在小屏幕笔记本电脑atm上工作混乱

【问题讨论】:

为了显示 SUPPORT PAGE,您是使用 pushviewcontroller 还是 presentviewcontroller 显示它? 我正在使用 push segue 如果您没有设置完成按钮,您看到后退按钮了吗?你看到导航栏了吗? 我可以看到导航控制器,但没有默认的后退按钮,我在主要问题的底部添加了一个屏幕截图。 删除右下角的导航控制器,不需要它,因为它已经在导航控制器堆栈中 【参考方案1】:

我刚刚意识到您的菜单选项卡上没有导航栏。您需要做的就是嵌入导航控制器。如果它不起作用,请告诉我。

override  func tableView(_ tableView: UITableView, didSelectRowAt
 indexPath: IndexPath)
    if(indexPath.row == THE_ROWNUMBER_OF_YOUR_SUPPORT_PAGE)
        let displaySupportPage = self.storyboard?.instantiateViewController(withIdentifier: "SuppportPage") as! ChooseSalonTVC
        self.navigationController?.pushViewController(displaySupportPage, animated: true)
    

 

选中“按下时隐藏底部栏”

【讨论】:

导航栏上不显示后退按钮,但点击完成按钮时我也看不到标签栏 请在致电支持页面时显示您的代码,以及完成按钮的代码。 这一切都在界面生成器中完成。表格视图是静态的,从单元格到导航控制器。不适将布局的屏幕截图添加到原始问题 现在我知道为什么了.... 删除表格视图和支持页面之间的 uinavigationcontroller。直接从您的 TABLEVIEW(不是 TABLEVIEWCELL)连接到支持页面。 选择要为其隐藏 Tab Bar 的 View Controller,然后选择“Hide Bottom Bar on Push”。它添加了 tabBarHidden 属性(以 isTabBarHidden 作为其 getter)和 - (void)setTabBarHidden:(BOOL)hidden animated:(BOOL)animated 方法【参考方案2】:

您应该使用“显示(例如推送)”segue 而不是“推送”。这允许它在堆栈中正确显示自己。

使用“推送”要求现有屏幕存在于导航控制器中,而在第一次加载时它并不存在。通过使用“Push”,它会将控制器移动到导航控制器堆栈中,按下完成后会留下导航栏。

通过使用“显示(例如推送)”segue 选项,系统将根据您当前的视图层次结构选择使用模式演示或导航控制器推送。

显示(例如推送):

注意:如果您的视图使用模型演示文稿显示,您需要使用

[self dismissViewControllerAnimated:YES completion:nil]; 

而不是

[self.navigationController popViewControllerAnimated:YES]; 

您可以快速检查以选择正确的方法:

if (self.navigationController) 
    [self.navigationController popViewControllerAnimated:YES];

else 
    [self dismissViewControllerAnimated:YES completion:nil];

这将允许您以多种方式显示屏幕,而无需进行任何额外检查

【讨论】:

啊,你的措辞让我觉得你在使用已弃用的“推送”选项:) 我从你的编辑中明白了你的意思。我已经根据您的编辑和一些额外的措辞调整了我的答案 注意:如果您的视图使用模型演示文稿显示,您需要使用[self dismissViewControllerAnimated:YES completion:nil]; 而不是[self.navigationController popViewControllerAnimated:YES];

以上是关于导航控制器干扰 TabBar 控制器的主要内容,如果未能解决你的问题,请参考以下文章

选项卡不会以编程方式切换导航控制器内的 tabBar

TabBar 覆盖导航堆栈中的视图控制器内容

swift - 指定VC隐藏导航栏 - 禁用tabbar的根控制器手势,防止两个tabbar跳转 手势冲突

当我在基于选项卡的应用程序中从一个控制器导航到另一个控制器时,tabBar 被隐藏

推入导航堆栈时隐藏 TabBar 并在弹出导航堆栈时将其返回

Swift:通过 TabBar 和导航控制器以编程方式从一个视图转换到另一个视图