Ios 如何重用所有场景的标题部分?

Ios 如何重用所有场景的标题部分?,ios,swift,Ios,Swift,我想重用标题部分所有视图控制器场景。标题部分表示绿色视图和标签(“AMAR LIFE”) 这是我的五一视图控制器场景 这是我的第一次查看控制器文档大纲 您需要在每个视图控制器中添加以下方法 override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(true) self.navigationController?.isNavigationBarHidden = false self.navi

我想重用
标题
部分所有
视图控制器场景
。标题部分表示绿色视图和标签(“AMAR LIFE”)

这是我的五一视图控制器场景

这是我的第一次查看控制器文档大纲


您需要在每个视图控制器中添加以下方法

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(true)
    self.navigationController?.isNavigationBarHidden = false
    self.navigationController?.navigationBar.setBackgroundImage(#imageLiteral(resourceName: "123"), for: .default)
    self.title = "Hi I am tittle"
}
另外,如果您想避免代码重复并做得更好,只需创建一个父UIview并在其中写入此方法,然后在所有其他视图中继承它。然而,这两种解决方案都很好。 您可以根据需要更改标题和图像。
谢谢

UITabBarController子类。使绿色视图成为选项卡栏控制器主视图的子视图。每当选定的视图控制器发生更改(或任何其他情况发生时),请保持将绿色视图置于前面。(更好的做法是,将绿色视图设置为图层,而不是视图,并将其设置为更高的z位置,使其自动浮动在所有子视图的前面。)

尝试以下步骤以实现标题在所有视图上可见

步骤1:将navigationController拖到情节提要中并删除navigationController附带的tableView rootViewcontroller。将navigationController连接到tabBarController。现在,navigationController可用于所有视图

注意:您的故事板布局应如下图所示

第2步:在FirstTabBarController中实现以下代码

   override func viewDidLoad() {
    super.viewDidLoad()

    // Apply transparency to NavigationBar.
    navigationController?.navigationBar.setBackgroundImage(UIImage(), for: UIBarMetrics.default)
    navigationController?.navigationBar.shadowImage = UIImage()

    //Setting up scanView background
    let barView = UIView(frame: CGRect(x:0, y:0, width:view.frame.width,height: (navigationController?.navigationBar.frame.height)! + UIApplication.shared.statusBarFrame.height)) 
    barView.backgroundColor=UIColor.green // set any colour you want..
    barView.layer.borderColor = UIColor.black.cgColor
    barView.layer.borderWidth = 3
    navigationController?.navigationBar.addSubview(barView)

   //Setting up labelView
    let label = UILabel()
    label.frame = CGRect(x:25, y:5, width:view.frame.width - 50 , height:((navigationController?.navigationBar.frame.height)! + UIApplication.shared.statusBarFrame.height) - 10)
    label.text = "AMAR LIFE"
    label.textAlignment = .center
    label.textColor = .black
    label.font = UIFont(name: "HelveticaNeue-medium", size: CGFloat(40))
    label.layer.borderColor = UIColor.black.cgColor
    label.layer.borderWidth = 3
    barView.addSubview(label)

}
输出:


您可以在一个单独的xib文件中创建自己的UIView,从bundle中加载并将其添加到主视图中。@AhmadF是制作应用程序标题的最佳选择吗?如果不是,那么请建议我,我不太确定你的目标是什么,我更喜欢让UINavigation bar做它的本地行为。但是,如果需要从束中获取视图并将其添加为子视图,则应注意如何为其设置约束。故事板中的场景是与单个视图控制器实例关联的视图层次。您的第一个插图显示了五个场景,而不是一个。@Caleb感谢您的好意。我是swift新手,请建议我应该阅读哪些内容或书籍。谢谢,我没有导航控制器,然后简单地使用self并删除导航控制器。基本上,您的目标是使您的选项卡栏控制器与此绿色视图的操作完全相同!选项卡栏位于所有视图控制器视图的前面;你想让绿景也这么做。更简单的方法!将选项卡栏控制器置于导航控制器内,并使导航栏变为绿色。导航控制器实际上从未在任何地方导航:它的工作只是承载导航栏。它已经知道如何把导航条放在其他所有东西的前面,所以你没有更多的工作要做。但是,它将出现在屏幕的顶部,与您的图形不同。将选项卡栏控制器放在导航控制器中从来都不受支持。除非最近情况有所改变,但不是相反。@coderLIfe我不知道你想从我这里得到什么。我已经提出了我的建议。如果你不喜欢,就不要接受。我的建议是基于您最初的屏幕截图,其中显示了一个选项卡栏控制器和它的一群孩子。现在您发布了另一个屏幕截图,显示了完全不同的配置?对不起,我不玩那种“鱼饵换饵”的游戏。我所说的,我已经说过了。