【发布时间】:2017-09-17 19:10:40
【问题描述】:
我按照本教程顺利隐藏了状态栏smoothly hide statusBar,当我在练习项目中使用它时一切正常。我在其他项目中使用没有SplitVC但有一个tabBar并使用navVC & tableView的代码,一切正常。在那些我可以成功地让它出现/消失。
在我的实际项目中,我使用的是用于 iPad 的 SplitViewController。我注意到当我实现从链接到我的 SplitViewController 的方向时,状态栏不会隐藏。然后,我使用 Apple 的默认 MasterDetailApp 制作了一个新项目,以确保我没有做错任何事情,但它在那里也不起作用。我保留了所有 Apple 的原始代码,只添加了使状态栏出现/消失的必要方法
在
info.plist中我添加了View controller-based status bar appearance并将其设置为YES在情节提要中,我向 DetailVC 添加了一个紫色按钮以触发 statusBar 消失。我还在方法中添加了让backBar按钮消失/重新出现
我在 DetailVC 场景中添加了使 statusBar 消失/消失的所有方法。
我在场景中添加了一个 tapGesture 以使 statusBar 和 backButton 重新出现
我点击了主场景上的加号按钮,出现了一个日期,点击它进入 DetailVC,按下紫色buttonPressed 隐藏状态栏和后退按钮,但只有后退按钮被隐藏。我触摸背景,backButton 重新出现。状态栏不动。
我保留了 Apple 项目的所有原始代码,并在其下方添加了我的代码:
class DetailViewController: UIViewController {
//MARK:- Apple's code
@IBOutlet weak var detailDescriptionLabel: UILabel!
func configureView() {
if let detail = detailItem {
if let label = detailDescriptionLabel {
label.text = detail.description
}
}
}
override func viewDidLoad() {
super.viewDidLoad()
configureView()
// make backButton and statusBar reappear when scene is tapped
let tapGesture = UITapGestureRecognizer(target: self, action: #selector(showBackButtonAndStatusBar))
view.addGestureRecognizer(tapGesture)
}
var detailItem: NSDate? {
didSet {
configureView()
}
}
//MARK:- Outside of the tapGesture in viewDidLoad everything below here is what I added
// bool to determine wether to hide the statusBar or not
var statusBarShouldBeHidden = false
// api method to allow the staus bar to be hidden
override var prefersStatusBarHidden: Bool{
return statusBarShouldBeHidden
}
// api method to animate status bar appearance/disappearance
override var preferredStatusBarUpdateAnimation: UIStatusBarAnimation{
return .slide
}
@IBAction func buttonTapped(_ sender: UIButton) {
// 1. hide backBar button
navigationItem.setHidesBackButton(true, animated: false)
// 2. set bool to true
statusBarShouldBeHidden = true
UIView.animate(withDuration: 0.25){
// 3. api method to allow the statusBar to disappear
self.setNeedsStatusBarAppearanceUpdate()
}
}
//called when background is touched and added to tapGesture in viewDidLoad
@objc func showBackButtonAndStatusBar(){
// 1. set bool to false
statusBarShouldBeHidden = false
UIView.animate(withDuration: 0.25){
// 2. bring statusBar back
self.setNeedsStatusBarAppearanceUpdate()
}
// 3. bring backButton back
navigationItem.setHidesBackButton(false, animated: true)
}
}
如何让 SplitViewVC 让我隐藏状态栏?
【问题讨论】:
-
有趣,但是设置应用程序(原生)可以隐藏它,所以我们也可以。
-
你解决了吗?
-
@Jageen 我真的厌倦了它,只是决定保留状态栏。在我的 iOS 时间里,SplitViewController 必须是所有头痛中最头疼的问题。我对自己说,也许我必须在 SplitViewController 本身上更改它,但问题是它会将应用程序广泛应用于连接到 splitVC 的每个子 vc。那是我说“呃,算了吧”
-
不错的选择,你可以在这里写你的研究,看看是否有人会想出不同的方法(只有当你正在寻求解决方案时,否则只需删除这个问题:))
-
@Jageen 我可能会回到它。我还有很多其他的错误需要解决,这就是我决定继续前进的原因。我确信其他人会遇到这个问题,而没有意识到是 splitVC 导致了这个问题。谢谢你的convo ????????????
标签: ios swift uisplitviewcontroller statusbar master-detail