我按照本教程顺利隐藏了状态栏smoothly hide statusBar,当我在练习项目中使用它时,一切正常。我在其他项目中使用的代码没有SplitVC,但有一个TabBar,并使用navView & tableView和一切工作正常。在那些我可以成功地让它出现/消失。Swift iOS -SplitViewController不会让我隐藏StatusBar?
在我的实际项目中,我使用了iPad的SplitViewController。我注意到,当我将链接指向SplitViewController时,statusBar不会隐藏。然后,我使用Apple的默认MasterDetailApp创建了一个新项目,以确保我没有做错任何事情,但它在那里也不起作用。我保存了所有的苹果公司的原代码,只在必要的方法加入使状态栏出现/消失
在
info.plist
我加入了View controller-based status bar appearance
并将其设置为YES
在故事板我添加了一个紫色按钮到DetailVC以触发statusBar消失。我还添加了使backBar按钮消失/重新出现的方法
我添加了使statusBar消失/消失到DetailVC场景的所有方法。
我添加了一个tapGesture到现场,使状态栏和后退按钮重新出现
我点击主场景的加号按钮,日期出现了,点击它来到DetailVC,按下紫色buttonPressed
来隐藏statusBar和backButton,但只有backButton被隐藏。我触摸背景和backButton重新出现。 statusBar不会移动。
我保持全部原代码从苹果公司的项目,并添加它下面的地雷:
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
你解决了这个问题吗? – Jageen
@Jageen我真的厌倦了它,只是决定保持状态栏。 SplitViewController必须成为我iOS时代所有令人头疼的问题。我对自己说,也许我必须在SplitViewController本身上进行更改,但问题在于它会将应用程序范围应用于连接到splitVC的每个子vc。这就是当我说“嗯,忘记它” –