如何在 Swift 中隐藏第一个 ViewController 的导航栏?
Posted
技术标签:
【中文标题】如何在 Swift 中隐藏第一个 ViewController 的导航栏?【英文标题】:How to hide a navigation bar from first ViewController in Swift? 【发布时间】:2015-05-26 09:30:18 【问题描述】:如何快速隐藏第一个 ViewController 或特定 ViewController 的导航栏?
我在viewDidLoad()
中使用了以下代码:
override func viewDidLoad()
super.viewDidLoad()
self.navigationController?.isNavigationBarHidden = true
还有viewWillAppear
:
override func viewWillAppear(animated: Bool)
self.navigationController?.isNavigationBarHidden = true
这两种方法都对所有 ViewController 隐藏了导航控制器。
【问题讨论】:
您需要为所有视图控制器手动管理它..您不能为任何一个.. 【参考方案1】: private func setupView()
view.backgroundColor = .white
navigationController?.setNavigationBarHidden(true, animated: false)
另类
在 viewDidLoad 中使用此设置
title = "Madman"
navigationController?.isNavigationBarHidden = false
navigationController?.navigationBar.prefersLargeTitles = true
navigationItem.largeTitleDisplayMode = .always
检查Collectionview、scrollview或tableView的约束
NSLayoutConstraint.activate([
tableView.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor),
tableView.bottomAnchor.constraint(equalTo: view.bottomAnchor),
tableView.leadingAnchor.constraint(equalTo: view.leadingAnchor),
tableView.trailingAnchor.constraint(equalTo: view.trailingAnchor)
])
【讨论】:
【参考方案2】: /*. Swift 5 */
let controller = self.storyboard?.instantiateViewController(withIdentifier: "sc_userNavigation") as! UserNavigationViewController
let navigationController = UINavigationController(rootViewController: controller)
navigationController.setNavigationBarHidden(true, animated: false)
navigationController.modalPresentationStyle = .fullScreen
self.present(navigationController, animated: false, completion: nil)
【讨论】:
【参考方案3】:您也可以为此创建一个扩展,这样您就可以重用该扩展,而无需在每个视图控制器中一次又一次地实现它。
import UIKit
extension UIViewController
func hideNavigationBar(animated: Bool)
// Hide the navigation bar on the this view controller
self.navigationController?.setNavigationBarHidden(true, animated: animated)
func showNavigationBar(animated: Bool)
// Show the navigation bar on other view controllers
self.navigationController?.setNavigationBarHidden(false, animated: animated)
所以你可以使用下面的扩展方法
override func viewWillAppear(_ animated: Bool)
super.viewWillAppear(animated)
hideNavigationBar(animated: animated)
override func viewWillDisappear(_ animated: Bool)
super.viewWillDisappear(animated)
showNavigationBar(animated: animated)
【讨论】:
不值得扩展,是吗? :) 取决于您隐藏/显示导航栏的视图数量。我觉得大多数情况下你只隐藏第一个,但如果你经常这样做,扩展很好。 当然,这不值得。不要发明已经存在的东西。【参考方案4】:在视图中调用set hide方法会出现和消失。如果您不调用视图中的方法,则会以状态 false 消失。它将在完整的导航层次结构中隐藏导航栏
override func viewWillAppear(_ animated: Bool)
super.viewWillAppear(animated)
self.navigationController?.setNavigationBarHidden(true, animated: true)
override func viewWillDisappear(_ animated: Bool)
super.viewWillDisappear(animated)
self.navigationController?.setNavigationBarHidden(false, animated:true)
【讨论】:
这是一个复制/粘贴响应。您的回答与此处其他 2 或 3 个相等的回答有什么区别??【参考方案5】:如果您知道所有其他视图都应该使该栏可见,则可以使用viewWillDisappear
将其再次设置为可见。
在斯威夫特中:
override func viewWillAppear(_ animated: Bool)
super.viewWillAppear(animated)
navigationController?.setNavigationBarHidden(true, animated: animated)
override func viewWillDisappear(_ animated: Bool)
super.viewWillDisappear(animated)
navigationController?.setNavigationBarHidden(false, animated: animated)
【讨论】:
这个答案更有效率。想想您添加的每个新 ViewController 的重复代码。 ***.com/a/39679506/5079380【参考方案6】:在 Swift 中隐藏导航栏的方法:
self.navigationController?.setNavigationBarHidden(true, animated: true)
self.navigationController?.navigationBar.isHidden = true
self.navigationController?.isNavigationBarHidden = true
【讨论】:
self.navigationController?.setNavigationBarHidden(true, animated: true) 为我工作【参考方案7】:在 Swift 中显示导航栏的方式:
self.navigationController?.setNavigationBarHidden(false, animated: true)
self.navigationController?.navigationBar.isHidden = false
self.navigationController?.isNavigationBarHidden = false
【讨论】:
【参考方案8】:我使用上述的变体,并将我的应用程序的部分隔离到嵌入到不同的 NavController 中。这样,我不必重置可见性。例如,在启动序列中非常有用。
【讨论】:
【参考方案9】:在 ios 8 中这样做
navigationController?.hidesBarsOnTap = true
但仅当它是 UINavigationController 的一部分时
当你想要它时让它变成假
【讨论】:
【参考方案10】:您可以从窗口控制器 (Swift3) 中执行此操作
class WindowController: NSWindowController
override func windowDidLoad()
super.windowDidLoad()
window?.titleVisibility = .hidden
【讨论】:
什么是窗口控制器? 这是针对 macOS,而不是 iOS【参考方案11】:您可以在viewWillDisappear
中取消隐藏navigationController
override func viewWillDisappear(animated: Bool)
super.viewWillDisappear(animated)
self.navigationController?.isNavigationBarHidden = false
斯威夫特 3
override func viewWillDisappear(_ animated: Bool)
super.viewWillDisappear(animated)
self.navigationController?.setNavigationBarHidden(false, animated: animated)
【讨论】:
【参考方案12】:在 Swift 3 中,您也可以使用 isNavigationBarHidden 属性来显示或隐藏导航栏
override func viewWillAppear(_ animated: Bool)
super.viewWillAppear(animated)
// Hide the navigation bar for current view controller
self.navigationController?.isNavigationBarHidden = true;
override func viewWillDisappear(_ animated: Bool)
super.viewWillDisappear(animated)
// Show the navigation bar on other view controllers
self.navigationController?.isNavigationBarHidden = false;
【讨论】:
【参考方案13】:斯威夫特 3
override func viewWillAppear(_ animated: Bool)
super.viewWillAppear(animated)
// Hide the navigation bar on the this view controller
self.navigationController?.setNavigationBarHidden(true, animated: animated)
override func viewWillDisappear(_ animated: Bool)
super.viewWillDisappear(animated)
// Show the navigation bar on other view controllers
self.navigationController?.setNavigationBarHidden(false, animated: animated)
【讨论】:
使用覆盖不要忘记调用超级方法:super.viewWillAppear(animated) 和 super.viewWillDisappear(animated) 它会删除回复的链接吗? 我确信它不能很好地与视觉级别的“向后滑动”一起工作,但一切都很好。谢谢! 旁注:self.
不需要。
在往回滑动时,从带有导航栏的视图到带有隐藏导航栏的视图,我们如何重新实现导航栏淡入淡出?以上是关于如何在 Swift 中隐藏第一个 ViewController 的导航栏?的主要内容,如果未能解决你的问题,请参考以下文章
在 Swift 中构建一个圆形头像堆:如何将最后一张照片隐藏在第一张照片下面?
一个 UIView Swift 中的多个 TableViews - 如何同时显示