navigationBar.isHidden 和 setNavigationBarHidden 之间的区别

san*_*osh 6 uinavigationcontroller ios swift

我有我从隐藏导航栏的视图控制器推送的视图控制器。但我想在目标视图控制器中显示导航栏。

我用这个语句尝试过它没有显示导航栏。

self.navigationController?.navigationBar.isHidden = false
Run Code Online (Sandbox Code Playgroud)

我试过这个声明它正在工作

self.navigationController?.setNavigationBarHidden(false, animated: true)
Run Code Online (Sandbox Code Playgroud)

我想知道有什么区别?

Bra*_*gKS 7

.isHiddensetNavigationBarHidden()产生不同的效果和结果。我们不会谈论动画部分。

的属性self.navigationController?.navigationBar.isHidden是从 的扩展UIView。该isHidden财产属于UIView这意味着,navigationBar(延伸UIView)做了一些覆盖在isHidden使其具有不同的效果和结果相比setNavigationBarHidden()

示例setNavigationBarHidden(true)

在此处输入图片说明

导航栏不会是透明的,第 1 页(导航栏隐藏的页面)。

.isHidden = true 的示例:

在此处输入图片说明

其中导航栏是完全透明的,第 1 页显示在第 2 页的导航栏下。第 3 个是 UIWindow。


Grz*_*ski 5

效果完全相同,但是使用第二个版本(方法)时您还可以定义动画。

当您通过属性执行此操作时 - 默认情况下动画处于关闭状态。

除此之外,您还有另一个选择:

self.navigationController?.isNavigationBarHidden = false
Run Code Online (Sandbox Code Playgroud)

有关该主题的更多信息: https://developer.apple.com/documentation/uikit/uinavigationcontroller/1621850-isnavigationbarhidden

如果为 true,则隐藏导航栏。默认值为 false。设置此属性会更改导航栏的可见性,而无需动画更改。如果您想以动画方式进行更改,请使用 setNavigationBarHidden(_:animated:) 方法。


Ram*_*sal -5

不,它们不一样,

self.navigationController?.isNavigationBarHidden

是一个 getter 属性(它显示导航栏是否隐藏。)它只会返回一个布尔值,表示导航栏是否隐藏的状态。(尝试将其值分配给 bool ,就像var isHidden = self.navigationController?.isNavigationBarHidden它会根据导航栏的状态为您提供 true 或 false 一样。)

然而 self.navigationController?.setNavigationBarHidden(false, animated: true)

是一个设置器属性,它可以让您设置导航栏的状态。

编译器不会抛出任何错误self.navigationController?.isNavigationBarHidden = false ,但不会执行任何操作,因为您只能从此处了解状态。

  • `isNavigationBarHidden` 既是 setter 又是 getter。`setNavigationBarHidden` 只是一个设置器,允许您设置栏是否有动画。Swift 将 `isNavigationBarHidden = true` 和 `setNavigationBarHidden(true,animated: false)` 视为相同。此外,询问有关“navigationBar.isHidden”的问题,我发现它会根据使用位置的不同给出不同的结果。 (8认同)