隐藏 NavBar 但显示带背景的状态栏
Posted
技术标签:
【中文标题】隐藏 NavBar 但显示带背景的状态栏【英文标题】:Hide NavBar but show status bar with background 【发布时间】:2016-09-24 20:57:06 【问题描述】:我的导航栏设置为在滚动时隐藏,但它也会在滚动时使用我的状态栏的背景颜色,在我滚动时在我的内容顶部留下白色的状态栏文本。我希望它看起来类似于许多应用程序的方式,如果我的导航栏和状态栏有橙色背景和白色文本,当滚动发生并且导航栏隐藏时,状态栏保留橙色背景。
更新1:
尝试在视图中添加一个 20 的子视图,但它没有显示出来。我可能会遗漏一些东西,因为这是我第一次尝试在没有 IB 的情况下创建应用程序。
我把这段代码放到了我的 TableViewController 中。我试过tableview。,查看。和超级视图。而且它们似乎都不起作用。
let statusBarBG = UIView()
statusBarBG.backgroundColor = UIColor.rgb(248, green: 148, blue: 6)
super.view?.addSubview(statusBarBG)
super.view?.addContstraintsWithFormat("V:|[v0(20)]", views: statusBarBG)
super.view?.addContstraintsWithFormat("H:|[v0]|", views: statusBarBG)
更新 2:
所以在尝试了一些事情之后,我的视图出现了,但它在导航栏下方并随着 tableview 滚动,这导致它在用户滚动时消失。
FeedTVController:UITableViewController
let statusBarBG = UIView(frame: CGRect(x: 0.0, y: -44, width: UIScreen.mainScreen().bounds.width, height: 20))
statusBarBG.backgroundColor = .redColor() //UIColor.rgb(248, green: 148, blue: 6)
self.view?.addSubview(statusBarBG)
应用代理:
let feedController = FeedTVController()
let navigationController = UINavigationController(rootViewController: feedController)
let tabBarController = TabBarController()
tabBarController.setViewControllers([vc1, vc2, vc3], animated: true)
window?.rootViewController = tabBarController
【问题讨论】:
你不能在视图顶部放置一个 20 点高且颜色正确的 UIView 吗? 【参考方案1】:环顾了一整天后,我找不到适合这种情况的解决方案。以一种合乎逻辑的方式思考我想出了一个解决方案,我希望对遇到同样问题的人有所帮助。
默认情况下没有状态栏背景视图,因此我们需要创建一个并将其放置在状态栏下方但导航栏上方:
On viewDidLoad()
self.navigationController?.hidesBarsOnSwipe = true
/* creates a View using the navigation bar frame to place under the status bar but above the navigation bar */
let statusBarView = UIView()
statusBarView.backgroundColor = .blue
statusBarView.frame = UIApplication.shared.statusBarFrame
UIApplication.shared.keyWindow?.addSubview(statusBarView)
【讨论】:
【参考方案2】:将您的 SuperView(ViewController 视图)的背景颜色更改为橙色(或您想要的任何颜色作为状态栏的默认颜色。
【讨论】:
【参考方案3】:没有代码,因此您可以通过两种方式隐藏导航栏:
如果您要手动隐藏一个子类,以便它相对于用户向上滚动的程度(如 Facebook)隐藏:那么不要一直隐藏您的导航栏,而是将其隐藏在屏幕左下角 20 点处.
如果您使用内置动画隐藏隐藏导航栏:然后添加一个连接到容器顶部的子视图,并且具有相同的背景颜色,高 20 点,因此当导航栏消失时,子视图位于顶部。
【讨论】:
目前我正在做后者。我试图创建一个应该这样做但它不起作用的子视图。我会把它添加到我的问题中。 好的,那么您应该添加一个具有 20 点height
的 UIView 并设置其 AutoLayout 约束,使其粘在容器的顶部。
我就是这么做的。 addConstraintsWithFormat("V:|[v0(20)]", 视图:statusBarBG)
@MichaelWilliams 您需要使用"V:[topGuide]-0-[v0(20)]"
,这样您的视图才会停留在导航栏上,而不是位于导航栏下方的根视图的顶部。
topGuide 根据控制台是无效参数以上是关于隐藏 NavBar 但显示带背景的状态栏的主要内容,如果未能解决你的问题,请参考以下文章
Android 11 SystemUI(状态/导航栏)-状态栏下拉时图标的隐藏与通知面板的半透黑色背景