正在将UITabBarController
推入堆栈:
let presenter = presentingViewController as! UINavigationController
let tabvc = UITabBarController()
tabvc.viewControllers = vcs
tabvc.customizableViewControllers = vcs
presenter.pushViewController(tabvc, animated: true)
一旦显示,正确显示更多标签按钮,但重新排列标签栏的编辑按钮不会。根据{{3}}:
标准更多项目的界面包含一个编辑按钮 允许用户重新配置标签栏。默认情况下,用户是 允许重新排列标签栏上的所有项目。如果你不想要的话 但是,用户可以修改某些项目,您可以删除相应的视图 来自customizableViewControllers中数组的控制器 属性。
我的猜测是标签栏不适合在导航控制器中使用。有关将编辑按钮带回来的想法吗?
答案 0 :(得分:16)
您可以同时拥有UINavigationController
和UITabBarController
;使用Storyboard
有助于更好地理解问题,任何这些解决方案都可以使用:
UITabBarController
作为初始视图控制器 presentViewController
代替pushViewController
Storyboard
segue执行模态演示rootViewController
当标签栏控制器是初始视图控制器时,编辑按钮会正常显示。
另一个导航控制器是 初始视图控制器,使用5个自适应动作Segue中的一个:
- >没有修改按钮,因为它与父UITableViewController
直接冲突。
- >按预期显示修改按钮。
<强> 1。计划模式
使用问题中提供的确切代码,更改最后一行:
let presenter = presentingViewController as! UINavigationController
let tabvc = UITabBarController()
tabvc.viewControllers = vcs
tabvc.customizableViewControllers = vcs
presenter.presentViewController(tabvc, animated: true, completion: nil)
<强> 2。故事板模态
保持Storyboard
主题,创建一个正确类型的segue,分配一个标识符(即 presentModallySegue ),上面的5行成为单行:
self.performSegueWithIdentifier("presentModallySegue", sender: self)
第3。 root交换
更激进的解决方案涉及在window
级别交换根视图控制器:
let tabvc = UITabBarController()
tabvc.viewControllers = vcs
tabvc.customizableViewControllers = vcs
self.view.window!.rootViewController = tabvc
更改设计以采用标签栏控制器作为初始视图控制器,或者显示标签栏控制器模态。
答案 1 :(得分:5)
原因是您的演示者的导航栏与更多部分的导航栏重叠。
如果您不显示导航控制器的导航栏,当您点击修改按钮>更多标签。