隐藏导航栏但显示带背景的状态栏

3
我的导航栏设置为滚动时隐藏,但是当它消失时,我的状态栏背景颜色也会消失,导致我在滚动时的内容上方有白色状态栏文本。我希望它看起来与许多应用程序类似,如果我的导航栏和状态栏具有橙色背景和白色文本,则在滚动发生并导航栏隐藏时,状态栏保留橙色背景。
更新1:
尝试将20的子视图添加到视图中,但未显示出来。由于这是我第一次尝试创建没有IB的应用程序,所以我可能遗漏了一些东西。
我将此代码放入我的TableViewController中。我尝试了tableview.,view. 和super.view.,但它们似乎都不起作用。
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:

经过尝试几种方法后,我的视图出现了,但是它在导航栏下面并且随着表格视图滚动而滚动,这会导致当用户滚动时视图消失。

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

1
你不能在你的视图顶部放置一个高度为20点且颜色正确的UIView吗? - Charles A.
3个回答

3

在整整一天的寻找后,我没有找到一个合适的解决方案。从逻辑上考虑,我想出了一个解决方案,希望能帮助遇到同样问题的人。

默认情况下,没有状态栏背景视图,因此我们需要创建一个并将其放置在状态栏下方但在导航栏上方:

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)

0

将您的SuperView(视图控制器视图)背景颜色更改为橙色(或任何您希望作为状态栏默认颜色的颜色)。


0

没有代码,因此您可能有两种方法隐藏导航栏:

如果您手动隐藏子类,使其相对于用户向上滚动的程度而隐藏(例如Facebook):那么请不要完全隐藏导航栏,而是从屏幕底部左侧的20个点处隐藏它。

如果您使用内置的动画隐藏navBar:那么请添加一个子视图,该子视图连接到容器的顶部,高度为20个点,并具有相同的背景颜色,这样当导航栏消失时,子视图就在顶部。


好的,那么您应该添加一个高度为20点的UIView,并设置其自动布局约束,使其粘附在容器的顶部。 - Armin
@MichaelWilliams 你需要使用"V:[topGuide]-0-[v0(20)]",这样你的视图就会固定在导航栏上,而不是在根视图的顶部,因为根视图会被导航栏遮挡。 - Armin
@MichaelWilliams 视图层次结构是什么?您能否发布一下添加子视图和设置约束的代码? - Armin
@MichaelWilliams 你为什么要将子视图添加到super.view而不是self.view - Armin
请检查我的帖子更新。我试了所有的方法来让它出现。super.view是我最后尝试的东西,所以我用它发布了帖子。 - Michael Williams
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接