Swift - 如何在 2 个视图控制器之间导航时删除黑色导航栏
Posted
技术标签:
【中文标题】Swift - 如何在 2 个视图控制器之间导航时删除黑色导航栏【英文标题】:Swift - how to remove black navigation bar when navigate between 2 view controller 【发布时间】:2017-01-05 03:35:09 【问题描述】:我的应用程序目前包含 2 个 UIViewController VC1 到 VC2。
在 VC1 中是主屏幕,UINavigationBar
上有一个橙色渐变图像
在VC2中有一个半透明的UINavigationBar
并在UINavigationBar
上设置UIImage
但是当在这两个视图控制器之间导航时,它会出现一个黑色的导航栏,直到转换完成。我已经尝试设置setNavigationBarHidden
,但我不想隐藏导航栏,那么如何删除黑色导航栏?
像这样-
在 VC1 中
override func viewWillAppear(animated: Bool)
if let navController = self.navigationController
UIGraphicsBeginImageContext(gradientLayer.frame.size)
gradientLayer.renderInContext(UIGraphicsGetCurrentContext()!)
let image = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
UIView.animateWithDuration(0.3, animations:
navController.navigationBar.setBackgroundImage(image, forBarMetrics: .Default)
navController.navigationBar.translucent = false
)
在 VC2 中
override func viewWillAppear(animated: Bool)
UIView.animateWithDuration(0.3, animations:
self.navigationController?.navigationBar.setBackgroundImage(UIImage(), forBarMetrics: .Default)
self.navigationController?.navigationBar.shadowImage = UIImage()
self.navigationController?.navigationBar.translucent = true
)
override func viewWillDisappear(animated: Bool)
if let navController = self.navigationController
UIGraphicsBeginImageContext(gradientLayer.frame.size)
gradientLayer.renderInContext(UIGraphicsGetCurrentContext()!)
let image = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
UIView.animateWithDuration(0.3, animations:
navController.navigationBar.setBackgroundImage(image, forBarMetrics: .Default)
navController.navigationBar.translucent = false
)
【问题讨论】:
查看此帖***.com/questions/39835420/… 【参考方案1】:如果你想隐藏导航栏而不是黑色的过渡。 (在第二屏)
Swift4:
override func viewWillAppear(_ animated: Bool)
self.navigationController?.setNavigationBarHidden(true, animated: true)
【讨论】:
请提供更具体的回答 谢谢你!有效。我使用了导航栏的isHidden
属性,但不起作用。【参考方案2】:
Swift 5 简单方法
//MARK:- Only use this code where you want to hide the navigation bar
self.navigationController?.setNavigationBarHidden(true, animated: true)
【讨论】:
【参考方案3】:这取决于您如何设置Navigation Bar
的颜色。如果你在下一个视图的viewDidLoad
中设置它,那么当你按下一个按钮进行转换时,它会在视图推动下一个控制器之前发生变化。
您希望它在什么时间更改?
对于之前:
viewDidLoad
或 viewWillAppear
之后:
viewDidAppear
并确保您没有在viewWillDisappear
上设置它或 imageView,因此它不会是黑色的。
【讨论】:
我是这样写的:在VC1中,viewWillAppear设置橙色渐变导航栏。如果移动到 VC2,viewWillAppear(VC2) 将图像设置为导航栏,当按下返回按钮时,viewWillDisappear 将导航栏设置为橙色渐变。【参考方案4】:您需要直接设置NavigationBar
颜色,例如:navigationController.navigationBar.barTintColor = .orange
【讨论】:
我已经在 viewWillDisappear 中设置了导航栏的颜色,但仍然无法正常工作... 或许可以发布您的代码,以便我们更好地了解发生了什么?【参考方案5】:对象 C:
self.extendedLayoutIncludesOpaqueBars = true;
斯威夫特:
extendedLayoutIncludesOpaqueBars = true
【讨论】:
以上是关于Swift - 如何在 2 个视图控制器之间导航时删除黑色导航栏的主要内容,如果未能解决你的问题,请参考以下文章
如何在使用当前模式打开另一个视图控制器后设置导航项的标题 - Swift