我有一个视图控制器,我从隐藏导航栏的视图控制器推送。但我想在目标视图控制器中显示导航栏。
我尝试了这个声明,它没有显示navigationBar。
self.navigationController?.navigationBar.isHidden = false
我试过这个声明它正在运作
self.navigationController?.setNavigationBarHidden(false, animated: true)
我想知道有什么区别?
答案 0 :(得分:4)
效果完全相同,但在使用第二个版本(方法)时,您也可以定义动画。
当您通过属性执行此操作时 - 默认情况下禁用动画。
除此之外,您还有另一种选择:
self.navigationController?.isNavigationBarHidden = false
此处有关该主题的更多信息: https://developer.apple.com/documentation/uikit/uinavigationcontroller/1621850-isnavigationbarhidden
如果为true,则隐藏导航栏。默认值为false。设置此属性会更改导航栏的可见性,而不会更改动画。如果要为更改设置动画,请改用setNavigationBarHidden(_:animated :)方法。
答案 1 :(得分:1)
.isHidden
和setNavigationBarHidden()
具有不同的效果和结果。我们不会谈论动画部分。
self.navigationController?.navigationBar.isHidden
的属性是UIView
的扩展。 isHidden
属性属于UIView
,这意味着navigationBar
(扩展了UIView
)在isHidden
中做了一些重载,导致其效果和结果与到setNavigationBarHidden()
。
setNavigationBarHidden(true)
的示例:
导航栏不是透明的,页面为1(隐藏了导航栏的页面)。
.isHidden = true的示例:
,其中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
上抛出任何错误
但是不会做任何事情,因为你只能从这里知道状态。