如何在导航控制器上方添加“查看”?

时间:2018-06-20 17:04:25

标签: ios swift

我想向TabBarController添加一个视图,但要在其中的任何NavigationController上方,以便将其向下推。在图片中的Apple Music应用中看到的东西(顶部紫色渐变视图)。它显示在所有屏幕上,就像在TabBar控制器中一样 enter image description here

我向自定义TabBarController添加了一个视图,但是无法通过以下方式将NavigationController下移:

navController.view.frame = CGRect(x: 0, y: 80, width: view.frame.width, height: view.frame.height)

我该如何实现?

2 个答案:

答案 0 :(得分:1)

您始终可以将View作为子视图添加到Navigation Bar

if let navigationBar = self.navigationController?.navigationBar {
   let yourView = //instantiate your view either using xib or from code
    navigationBar.addSubview(yourView)
}

这是我使用的代码

if let navBar = self.navigationController?.navigationBar, let customView = Bundle.main.loadNibNamed("SomeHeaderView", owner: self, options: nil)![0] as? UIView {
        navBar.addSubview(customView)
        customView.translatesAutoresizingMaskIntoConstraints = false
        customView.leadingAnchor.constraint(equalTo: navBar.leadingAnchor, constant: 0).isActive = true
        customView.trailingAnchor.constraint(equalTo: navBar.trailingAnchor, constant: 0).isActive = true
        customView.topAnchor.constraint(equalTo: navBar.topAnchor, constant: 0).isActive = true
        customView.heightAnchor.constraint(equalToConstant: 100).isActive = true
    }

添加的子视图简单明了。它具有红色背景色并带有标签。只是为了展示如何向subView添加额外的高度,我还添加了高度限制

这里是O / P

enter image description here

就状态栏颜色而言,您始终可以使用提供的here答案来将颜色设置为状态栏

希望这会有所帮助

答案 1 :(得分:0)

您需要做的是将导航控制器作为根视图,并添加选项卡栏控制器作为其嵌入式VC。 (嵌入式VC称为导航控制器的根视图控制器)

我不确定您如何构建视图层次结构,但是如果您想这样做

故事板

  1. 将导航控制器拖到情节提要上(在右下角的搜索中,第三个选项卡看起来像一个带有正方形的圆圈)
  2. 删除作为嵌入式VC出现的默认表视图
  3. 将标签栏控制器拖到情节提要上
  4. 在按住键盘上的control的同时,从“导航”控制器拖动到标签栏控制器。
  5. 按显示根目录控制器“关系segue”的选项

您现在将标签栏控制器嵌入到导航控制器中。

以编程方式

使用初始化程序之一,例如:

UINavigationController(rootViewController: <UIViewController>) UINavigationController(navigationBarClass: <AnyClass?>, toolbarClass: <AnyClass?>)

rootViewController是您的标签栏控制器。 您可以使用setViewControllers方法向其传递一个数组,如果您不使用rootViewController初始化程序,则该数组可能仅包含标签栏。

除非明确将其隐藏,否则导航控制器将始终显示导航栏。如果希望您的导航控制器看起来与默认控制器不同,例如在Apple Music应用程序中,也可以将导航栏和导航控制器子类化。

编辑

因此,由于问题实际上似乎在于扩展布局以将我的评论粘贴到条形图的下面/上方:

为了清楚起见,导航控制器是整个屏幕。顶部的栏称为导航栏,可通过self.navigationController?.navigationBar进行访问。

默认情况下,根视图控制器的内容(无论是否为制表符)都将位于半透明条之下。

现在,有两种方法可以防止内容在栏下方/上方移动。最简单的方法就是执行navigationController?.navigationBar.translucent = false,因为默认情况下内容不会进入不透明的条形之下。

也可以navigationController?.edgesForExtendedLayout = []

查看UINavigationController上的extendedLayoutInclludesOpaqueBarsedgesForExtendedLayout属性。