navigationBar.isHidden和setNavigationBarHidden之间的区别

时间:2017-11-24 09:30:26

标签: ios swift uinavigationcontroller

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

我尝试了这个声明,它没有显示navigationBar。

self.navigationController?.navigationBar.isHidden = false

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

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

我想知道有什么区别?

3 个答案:

答案 0 :(得分:4)

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

当您通过属性执行此操作时 - 默认情况下禁用动画。

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

self.navigationController?.isNavigationBarHidden = false

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

  

如果为true,则隐藏导航栏。默认值为false。设置此属性会更改导航栏的可见性,而不会更改动画。如果要为更改设置动画,请改用setNavigationBarHidden(_:animated :)方法。

答案 1 :(得分:1)

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

self.navigationController?.navigationBar.isHidden的属性是UIView的扩展。 isHidden属性属于UIView,这意味着navigationBar(扩展了UIView)在isHidden中做了一些重载,导致其效果和结果与到setNavigationBarHidden()

setNavigationBarHidden(true)的示例:

enter image description here

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

.isHidden = true的示例:

enter image description here

,其中navigationBar是完全透明的,并且第1页显示在第2页的navigationBar下。第3个是UIWindow。

答案 2 :(得分:0)

不,他们不一样,

self.navigationController?.isNavigationBarHidden

是一个getter属性(它会显示navBar是否隐藏。)它将返回一个布尔值,表示它隐藏或未隐藏的NavBar天气状态。 (尝试将其值分配给像var isHidden = self.navigationController?.isNavigationBarHidden这样的bool,它会根据状态向NavBar提供false。)

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

是一个setter propety,它为您提供设置navBar状态的功能。

编译器不会在self.navigationController?.isNavigationBarHidden = false上抛出任何错误 但是不会做任何事情,因为你只能从这里知道状态。