J'aimerais supprimer la barre d'état en haut de l'écran.
Cela ne fonctionne pas:
func application
(application: UIApplication,
didFinishLaunchingWithOptions launchOptions: NSDictionary?)
-> Bool
{
application.statusBarHidden = true
return true
}
J'ai aussi essayé:
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
}
Vous devez vraiment implémenter prefersStatusBarHidden sur votre (vos) contrôleur (s) de vue:
Swift 2
override func prefersStatusBarHidden() -> Bool {
return true
}
Swift 3 et plus tard
override var prefersStatusBarHidden: Bool {
return true
}
Ajouter le code, à l'intérieur de la méthode
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject:AnyObject]?) -> Bool {
application.statusBarHidden = true
return true
}
TERMINÉ! Exécutez votre application et plus de barre d'état!
Swift 3
Dans Info.plist
, définissez View controller-based status bar appearance
sur NO
Et appelez UIApplication.shared.isStatusBarHidden = true
Si vous souhaitez masquer et ramener la barre d'état sur le bouton, tapez sur , au moment de présenter et de fermer le menu déroulant , popups etc, vous pouvez utiliser cette méthode: -
Pour masquer la barre d'état: -
UIApplication.shared.keyWindow?.windowLevel = UIWindowLevelStatusBar
Pour ramener la barre d'état: -
UIApplication.shared.keyWindow?.windowLevel = UIWindowLevelNormal
Mise à jour pour iOS 10/Swift 3.0
Plus une fonction, maintenant une propriété ...
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
}
dans Swift 3.x:
override func viewWillAppear(_ animated: Bool) {
UIApplication.shared.isStatusBarHidden = true
}
Le problème ici n’a donc en réalité rien à voir avec Swift, mais à la façon dont l’aspect de la barre d’état est géré à partir d’iOS 7.
Par défaut, les contrôleurs de vue contrôlent individuellement l'apparence de la barre d'état lorsqu'ils sont à l'écran. Si vous souhaitez utiliser cette méthode de contrôle de la barre d'état, vous pouvez remplacer les méthodes suivantes pour tous les contrôleurs de vue pour lesquels vous souhaitez modifier l'apparence:
prefersStatusBarHidden
, preferredStatusBarStyle
, preferredStatusBarAnimation
,
Dans votre cas, vous implémenteriez simplement prefersStatusBarHidden
et renverriez true
.
L'autre façon serait de contrôler l'apparence de la barre d'état au niveau de l'application. Cela semble être ce que vous essayez réellement de faire (en définissant application.statusBarHidden
).
Pour que cela fonctionne, vous devez ouvrir le fichier Info.plist
de votre application, ajouter la clé UIViewControllerBasedStatusBarAppearance
et lui attribuer la valeur NO
.
J'ai effectivement compris cela moi-même. Je vais ajouter ma solution comme une autre option.
extension UIViewController {
func prefersStatusBarHidden() -> Bool {
return true
}
}
D'accord, cela devient donc un problème pour moi puisque iOS 9 ne prend en charge aucune des méthodes mentionnées ci-dessus, telles que UIApplication.sharedApplication().statusBarHidden = true
ou
UIApplication.sharedApplication().setStatusBarHidden(true, withAnimation: UIStatusBarAnimation.None)
et
override func prefersStatusBarHidden() -> Bool {
return true
}
fonctionne mais ne fournit pas de solution programmable où je puisse changer à une condition . (statusBarHidden = true
et statusBarHidden = false
comme nous l’avons fait auparavant).
Solution à cette folie:
En ajoutant à prefersStatusBarHidden()
comme ci-dessous, vous pouvez contrôler par programme les masques d'affichage et d'affichage de la barre d'état sans ajouter le paramètre UIViewControllerBasedStatusBarAppearance
à votre info.plist:
var showStatusBar = true
override func prefersStatusBarHidden() -> Bool {
if showStatusBar {
return false
}
return true
}
private func showStatusBar(enabled: Bool) {
showStatusBar = enabled
prefersStatusBarHidden()
}
puis utilisez-le comme ceci dans votre code:
//Hide Status Bar
showStatusBar(false)
OR
//Show Status Bar
showStatusBar(true)
Il suffit d'ajouter que, lors de la substitution d'une méthode ou d'une variable prefersStatusBarHidden
, le View controller-based status bar appearance
dans Info.plist doit être OUI, sinon le remplacement n'aura aucun effet.
Dans mon cas, je cherchais la barre d'état à afficher/masquer à la demande; au lieu de juste quand la vue se charge ou disparaît.
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()
Dans votre projet Général-> Infos de déploiement-> Style de la barre d'état. Cochez la case Masquer la barre d'état Remarque: - il masque la barre d'état dans l'application.
dans Swift 4.2 c'est une propriété maintenant.
override var prefersStatusBarHidden: Bool {
return true
}
Swift 4
//MARK:- Show Status Bar
UIApplication.shared.isStatusBarHidden = false
//MARK:- Hide Status Bar
UIApplication.shared.isStatusBarHidden = true
Pour Swift 4+, essayez le code suivant (testé sur 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: dans le contrôleur de la vue principale, ou le contrôleur de navigation principal si vous avez,
override var preferredStatusBarStyle: UIStatusBarStyle {
return .lightContent
}
override var prefersStatusBarHidden: Bool {
return false
}
Et "Afficher l'apparence de la barre d'état basée sur le contrôleur" dans la pliste doit être défini sur OUI, sinon le code ci-dessus ne sera pas appelé.
Si vous souhaitez masquer la barre d'état lors du lancement de l'application, le nom "La barre d'état est initialement masquée" doit être OUI. Cela peut éviter que l'image de lancement ne soit déformée lorsque des barres bleues supplémentaires apparaissent en haut de l'écran.
Une solution qui fonctionne pour moi. si vous souhaitez masquer la barre d'état sur un contrôleur de vue spécifique pendant le chargement:
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()
}
}
Attention: si vous définissez la clé " Afficher l'apparence de la barre d'état basée sur le contrôleur " sur "NO" dans votre info.plist, le code ci-dessus ne fonctionne pas. Vous devez définir la clé sur "YES" ou remove it from info.plist
Dans votre projet-> Général-> Informations de déploiement
Statusbar Style: -
juste marqué Masquer la barre d'état (iOS 10)
Vous pouvez utiliser ce code dans votre ViewController
Class
scope
open override var prefersStatusBarHidden: Bool { return true }
Si vous présentez le contrôleur de vue de manière modale, essayez
viewController.hidesBottomBarWhenPushed = true
viewController.modalPresentationCapturesStatusBarAppearance = true
J'utilise Xcode 8.1 (8B62) avec une cible de déploiement définie à 10.1 et je n'ai pas eu beaucoup de chance avec les options de remplacement mentionnées ci-dessus. Cependant, cocher la case "Masquer la barre d'état" dans les infos de déploiement a été une solution.
J'espère que ça aide.
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
application.isStatusBarHidden = true
return true
}