如何指定在一个屏幕上显示导航栏而不在另一个屏幕上显示?

How to specify to show a navigation bar on one screen and not to show it on another?

我有两个视图控制器,vcAvcBvcA 是初始视图控制器,它嵌入在导航控制器中,navVC。为了显示 vcB,我用 navVCvcB。 但是,对于 vcA 我不想显示导航栏,对于 vcB 我确实想显示导航栏。 我看过这个 但它没有解决我的问题,因为我需要支持向后滑动。当我试图使导航控制器在向后滑动时消失时,导航控制器会立即消失或缓慢消失,具体取决于是否启用了动画。 我的 navVC 也显示了页面 sheet 动画,所以如果我将导航栏设置为在 viewWillDisappear 中消失,它会在我模态向下平移时消失。

有没有办法指定在第一个 vc 上不显示导航栏,而在第二个上显示导航栏?或者有什么我不熟悉的更好的方法吗?

虽然默认视图控制器最初让生活变得非常美好,但它们通常具有非常具体的操作方式,并且尝试在这些范例之外操作将很困难,如果不是不可能的话。

我建议不要在您不希望栏出现的视图上使用默认导航视图控制器,而是自定义您自己的视图以支持您尝试复制的确切行为。

例如,您可以为 viewA 使用顶部没有栏的常规视图,然后转到导航视图控制器并将视图 B 设为默认视图。

为什么要隐藏 vcA 上的导航栏?

相反,您可以将 barTintColor 设置为与 vcA 背景颜色相同,您不必隐藏导航栏。

if #available(iOS 15.0, *) {
   let appearance = UINavigationBarAppearance()
   appearance.configureWithOpaqueBackground()
   appearance.backgroundColor = color
   vcA.navigationController?.navigationBar.standardAppearance = appearance
   vcA.navigationController?.navigationBar.scrollEdgeAppearance = vcA.navigationController?.navigationBar.standardAppearance
} else {
   vcA.navigationController?.navigationBar.barTintColor = color
}