我会根据你写的关于你对这个问题的意图的cmets给你一个答案。
解决方案
您可以在打开侧边栏时让状态栏消失(类似于 Slack 应用程序),方法是从侧边栏的 UIViewController 覆盖方法 prefersStatusBarHidden。它应该类似于以下内容:
override func prefersStatusBarHidden() -> Bool {
return true
}
你也可以通过preferredStatusBarStyle和preferredStatusBarUpdateAnimation两种方法修改它的外观
示例
我做了一个简单的项目来说明这一点。可以通过多种不同的方式实现侧边栏,因此我将这个示例基于弹出框。您的实施将取决于您如何实施侧边栏。
我制作了一个简单的故事板,其中每个都有两个UIViewController 和一个UIButton。当点击第一个UIButton 时,会触发一个Present As Popover 类型的segue,显示第二个控制器。
第一个UIViewController 没有代码(一切都在故事板中完成),但第二个UIViewController 有隐藏状态栏的代码。
我附上了故事板的屏幕截图和下面第二个UIViewController 的代码。
//
// PopController.swift
// SidebarHideStatus
//
// Created by Stefan Veis Pennerup on 31/01/16.
// Copyright © 2016 Kumuluzz. All rights reserved.
//
import UIKit
class PopController: UIViewController {
// MARK: - Storyboard actions
@IBAction func backButtonPressed(sender: UIButton) {
dismissViewControllerAnimated(true, completion: nil)
}
// MARK: - Status bar
override func prefersStatusBarHidden() -> Bool {
return true
}
}
更新 1:OP 使用 UIView 而不是 UIViewController 作为侧边栏。
首先,我建议您将侧边栏分解为一个单独的UIViewController,因为这将使其在未来更加可重用,但这是一个完全不同的讨论,可能会持续数天!
为了隐藏状态栏,那你还是需要使用我之前高亮的回调方法,但你只需要调用setNeedsStatusBarAppearanceUpdate方法手动更新即可。
我已使用以下代码更新了初始 UIViewController 并删除了 segue 以演示此方法。
//
// ViewController.swift
// SidebarHideStatus
//
// Created by Stefan Veis Pennerup on 31/01/16.
// Copyright © 2016 Kumuluzz. All rights reserved.
//
import UIKit
class ViewController: UIViewController {
// MARK: - Properties
private var isSidebarShown = false
// MARK: - Storyboard outlets
@IBAction func buttonPressed(sender: UIButton) {
isSidebarShown = !isSidebarShown
setNeedsStatusBarAppearanceUpdate()
}
// MARK: - Status bar
override func prefersStatusBarHidden() -> Bool {
return isSidebarShown
}
override func preferredStatusBarUpdateAnimation() -> UIStatusBarAnimation {
// NOTE: This method has no effect now when
// using the method setNeedsStatusBarAppearanceUpdate()
return .Slide
}
}