Ich möchte die Statusleiste oben auf dem Bildschirm entfernen.
Das funktioniert nicht:
func application
(application: UIApplication,
didFinishLaunchingWithOptions launchOptions: NSDictionary?)
-> Bool
{
application.statusBarHidden = true
return true
}
Ich habe auch versucht:
func application
(application: UIApplication,
didFinishLaunchingWithOptions launchOptions: NSDictionary?)
-> Bool
{
self.window = UIWindow(frame: UIScreen.mainScreen().bounds)
var controller = UIViewController()
application.statusBarHidden = true
controller.setNeedsStatusBarAppearanceUpdate()
var view = UIView(frame: CGRectMake(0, 0, 320, 568))
view.backgroundColor = UIColor.redColor()
controller.view = view
var label = UILabel(frame: CGRectMake(0, 0, 200, 21))
label.center = CGPointMake(160, 284)
label.textAlignment = NSTextAlignment.Center
label.text = "Hello World"
controller.view.addSubview(label)
self.window!.rootViewController = controller
self.window!.makeKeyAndVisible()
return true
}
Sie sollten prefersStatusBarHidden auf Ihren View-Controllern implementieren:
Swift 2
override func prefersStatusBarHidden() -> Bool {
return true
}
Swift 3 und später
override var prefersStatusBarHidden: Bool {
return true
}
Fügen Sie den Code innerhalb der Methode hinzu
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject:AnyObject]?) -> Bool {
application.statusBarHidden = true
return true
}
ERLEDIGT! Führen Sie Ihre App und keine Statusleiste mehr aus!
Swift 3
In Info.plist
setzen Sie View controller-based status bar appearance
auf NO
Und UIApplication.shared.isStatusBarHidden = true
anrufen
Wenn Sie die Statusleiste auf Tastendruck ein- und ausblenden möchten, während Sie Einblendmenü, Popups usw. anzeigen und wieder schließen Sie können diese Methode verwenden: -
So blenden Sie die Statusleiste aus: -
UIApplication.shared.keyWindow?.windowLevel = UIWindowLevelStatusBar
So rufen Sie die Statusleiste zurück: -
UIApplication.shared.keyWindow?.windowLevel = UIWindowLevelNormal
Update für iOS 10/Swift 3.0
Keine Funktion mehr, jetzt eine Eigenschaft ...
override var prefersStatusBarHidden: Bool {
return true
}
override func viewWillAppear(animated: Bool) {
super.viewWillAppear(true);
navigationController?.navigationBar.hidden = true // for navigation bar hide
UIApplication.sharedApplication().statusBarHidden=true; // for status bar hide
}
in Swift 3.x:
override func viewWillAppear(_ animated: Bool) {
UIApplication.shared.isStatusBarHidden = true
}
Das Problem hier hat also nichts mit Swift zu tun, sondern wie die Statusleiste ab iOS 7 gehandhabt wird.
Standardmäßig steuern View-Controller das Erscheinungsbild der Statusleiste individuell, wenn sie auf dem Bildschirm angezeigt werden. Wenn Sie diese Methode zum Steuern der Statusleiste verwenden möchten, können Sie die folgenden Methoden für die Ansichtssteuerungen überschreiben, für die Sie das Erscheinungsbild ändern möchten:
prefersStatusBarHidden
, preferredStatusBarStyle
, preferredStatusBarAnimation
,
In Ihrem Fall würden Sie einfach prefersStatusBarHidden
implementieren und true
zurückgeben.
Die andere Möglichkeit wäre, die Darstellung der Statusleiste auf Anwendungsebene zu steuern. Dies scheint das zu sein, was Sie tatsächlich versuchen (durch Setzen von application.statusBarHidden
).
Damit dies funktioniert, müssen Sie die Info.plist
-Datei Ihrer App öffnen, den Schlüssel UIViewControllerBasedStatusBarAppearance
hinzufügen und ihm den Wert NO
zuweisen.
Ich habe das selbst herausgefunden. Ich füge meine Lösung als weitere Option hinzu.
extension UIViewController {
func prefersStatusBarHidden() -> Bool {
return true
}
}
Okay, das ist für mich zu einem Problem geworden, da iOS 9 keine der oben genannten Methoden unterstützt, wie z. B. UIApplication.sharedApplication().statusBarHidden = true
oder .
UIApplication.sharedApplication().setStatusBarHidden(true, withAnimation: UIStatusBarAnimation.None)
und
override func prefersStatusBarHidden() -> Bool {
return true
}
funktioniert, bietet aber keine programmierbare Lösung, bei der ich eine Bedingung ändern kann. (. statusBarHidden = true
und statusBarHidden = false
wie zuvor).
Lösung für diesen Wahnsinn:
Durch Hinzufügen zu prefersStatusBarHidden()
wie unten können Sie das Ausblenden und Anzeigen der Statusleiste programmgesteuert steuern, ohne dass Sie die Einstellung UIViewControllerBasedStatusBarAppearance
zu Ihrer info.plist hinzufügen:
var showStatusBar = true
override func prefersStatusBarHidden() -> Bool {
if showStatusBar {
return false
}
return true
}
private func showStatusBar(enabled: Bool) {
showStatusBar = enabled
prefersStatusBarHidden()
}
dann verwenden Sie es so in Ihrem Code:
//Hide Status Bar
showStatusBar(false)
OR
//Show Status Bar
showStatusBar(true)
Um nur hinzuzufügen, wenn Sie die prefersStatusBarHidden
-Methode oder -Variable überschreiben, muss der View controller-based status bar appearance
in der Info.plist auf YES gesetzt sein
In meinem Fall habe ich nach der Statusleiste gesucht, die bei Bedarf angezeigt/ausgeblendet werden kann. anstatt nur, wenn die Ansicht geladen oder ausgeblendet wird.
Swift 3.x
//show status bar initially
var showStatusBar = true
//set the parameters
override var prefersStatusBarHidden: Bool {
if showStatusBar == true {
//does not prefer status bar hidden
print("does not prefer status bar hidden")
return false
} else {
//does prefer status bar hidden
print("does prefer status bar hidden")
return true
}
}
//ex: hide status bar and call parameter function again whenever you want
showStatusBar = false
setNeedsStatusBarAppearanceUpdate()
In Ihrem Projekt Allgemein-> Bereitstellungsinfo-> StatusleistenstilAktivieren Sie das Kontrollkästchen Statusleiste ausblenden Hinweis: Die Statusleiste wird in der gesamten Anwendung ausgeblendet
in Swift 4.2 ist es jetzt eine Eigenschaft.
override var prefersStatusBarHidden: Bool {
return true
}
Schnell 4
//MARK:- Show Status Bar
UIApplication.shared.isStatusBarHidden = false
//MARK:- Hide Status Bar
UIApplication.shared.isStatusBarHidden = true
Für Swift 4+ versuchen Sie den folgenden Code (getestet mit Swift 4.0, 4.1 - IOS 10, 11):
override var prefersStatusBarHidden: Bool { return true }
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
// call this func to force preferredStatusBarStyle to be read again.
setNeedsStatusBarAppearanceUpdate()
}
Swift 5: Im Hauptansichts-Controller oder im Hauptnavigations-Controller, wenn Sie haben,
override var preferredStatusBarStyle: UIStatusBarStyle {
return .lightContent
}
override var prefersStatusBarHidden: Bool {
return false
}
Und "Controller-basiertes Statusleisten-Erscheinungsbild anzeigen" in plist muss JA lauten, sonst wird der obige Code nicht aufgerufen.
Wenn Sie die Statusleiste beim Starten der App ausblenden möchten, muss "Statusleiste ist anfangs ausgeblendet" in plist auf JA stehen. Dies kann verhindern, dass das Startbild verzerrt wird, wenn ein zusätzlicher blauer Balken oben auf dem Bildschirm angezeigt wird.
Eine Lösung, die für mich funktioniert; Wenn Sie die Statusleiste beim Laden eines bestimmten View-Controllers ausblenden möchten:
import UIKit
class ViewController: UIViewController {
private var hideStatusBar: Bool = false
override var prefersStatusBarHidden: Bool {
return hideStatusBar
}
override var preferredStatusBarUpdateAnimation: UIStatusBarAnimation {
return UIStatusBarAnimation.slide
}
override func viewDidLoad() {
super.viewDidLoad()
view.backgroundcolor = .white
hideStatusBar = true
UIView.animate(withDuration: 0.3) {
self.setNeedsStatusBarAppearanceUpdate()
}
}
Achtung: Wenn Sie in Ihrer info.plist die Taste " Controller-basierte Statusleiste anzeigen " auf "NO" setzen, funktioniert der obige Code nicht. Sie sollten den Schlüssel auf "YES" oder remove it aus info.plist setzen
In Ihrem Projekt-> Allgemein-> Bereitstellungsinfo
Statusleistenstil: -
gerade markierte Statusleiste ausblenden (iOS 10)
Sie können diesen Code in Ihrer ViewController
Class
scope
verwenden.
open override var prefersStatusBarHidden: Bool { return true }
Wenn Sie den View Controller modal präsentieren, versuchen Sie es
viewController.hidesBottomBarWhenPushed = true
viewController.modalPresentationCapturesStatusBarAppearance = true
Ich verwende Xcode 8.1 (8B62) mit einem Implementierungsziel, das auf 10.1 gesetzt ist, und ich hatte mit den oben genannten Überschreibungsoptionen nicht viel Glück. Das Aktivieren der Option "Statusleiste ausblenden" in Deployment Info hat mir jedoch geholfen.
Ich hoffe das hilft.
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
application.isStatusBarHidden = true
return true
}