Jak ukryć pasek stanu w aplikacji Swift na iOS?

Chciałbym usunąć pasek stanu u góry ekranu.

To nie działa:

func application
(application: UIApplication,
didFinishLaunchingWithOptions launchOptions: NSDictionary?)
-> Bool
{
        application.statusBarHidden = true
        return true
}

Ja też próbowałem:

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
}
Author: confile, 2014-06-16

22 answers

Naprawdę powinieneś zaimplementować prefersStatusBarHidden na kontrolerze widoku:

Swift 2

override func prefersStatusBarHidden() -> Bool {
    return true
}

Swift 3 i później

override var prefersStatusBarHidden: Bool {
    return true
}
 375
Author: drewag,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-10 05:08:48
  1. Przejdź do Info.plik plist
  2. najedź kursorem na jedną z tych linii, a pojawi się przycisk ( + ) i ( -).
  3. Kliknij przycisk plus, aby dodać nowy typ klucza na początku z wielką literą V, A automatycznie pierwszym wyborem będzie wygląd paska stanu opartego na kontrolerze widoku.
  4. dodaj to jako klucz.
  5. Ustaw wartość na " nie "
  6. Idź do Ciebie AppDelegate.swift
  7. Dodaj kod wewnątrz metody

    func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject:AnyObject]?) -> Bool {
        application.statusBarHidden = true
        return true
    }
    

Zrobione! Uruchom aplikację i koniec pasek stanu!

 93
Author: nycdanie,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-02-19 03:33:20

Swift 3

In Info.plist set View controller-based status bar appearance to NO

I wywołanie UIApplication.shared.isStatusBarHidden = true

 66
Author: Joseph Mark,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-07-12 19:54:07

Jeśli wolisz podejście wizualne niż kodowanie, użyj tej metody: w Twoim info.plist

Tutaj wpisz opis obrazka wystarczy dodać View controller-based status bar appearance do NO

I Status bar is initially hidden jako YES

 30
Author: Milad Masoodi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-10-16 14:00:16

Aktualizacja dla iOS 10 / Swift 3.0

Już nie Funkcja, teraz właściwość...

override var prefersStatusBarHidden: Bool {
    return true
}
 27
Author: atlwx,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-10-26 07:36:32
 override func viewWillAppear(animated: Bool) {
    super.viewWillAppear(true);
    navigationController?.navigationBar.hidden = true // for navigation bar hide
    UIApplication.sharedApplication().statusBarHidden=true; // for status bar hide
}
 24
Author: Mohit tomar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-11-11 07:14:38

Jeśli chcesz ukryć i przywrócić pasek stanu na przycisku dotknij , podczas gdy w momencie prezentacji i odrzucenia menu slide-in, popups etc, wtedy możesz użyć tej metody:-

Aby ukryć pasek stanu:-

UIApplication.shared.keyWindow?.windowLevel = UIWindowLevelStatusBar

Aby przywrócić pasek stanu:-

UIApplication.shared.keyWindow?.windowLevel = UIWindowLevelNormal 
 22
Author: Vincent Joy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-16 04:26:50

W Swift 3.x:

override func viewWillAppear(_ animated: Bool) {
    UIApplication.shared.isStatusBarHidden = true
}
 14
Author: Samira Ekrami,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-01-09 07:20:39

Więc problem tutaj w rzeczywistości nie ma nic wspólnego z Swift, ale jak wygląd paska stanu jest obsługiwany w systemie iOS 7.

Domyślnie Kontrolery widoku indywidualnie kontrolują wygląd paska stanu, gdy znajdują się na ekranie. Jeśli chcesz użyć tej metody kontrolowania paska stanu, możesz nadpisać następujące metody dla dowolnych kontrolerów widoku, dla których chcesz zmodyfikować wygląd:

prefersStatusBarHidden, preferredStatusBarStyle, preferredStatusBarAnimation,

W Twoim przypadku, po prostu implementacja prefersStatusBarHidden I return true.

Innym sposobem byłoby kontrolowanie wyglądu paska stanu na poziomie aplikacji. Wydaje się, że to właśnie próbujesz zrobić (ustawiając application.statusBarHidden).

Aby to zadziałało, musisz otworzyć plik Info.plist aplikacji i dodać klucz UIViewControllerBasedStatusBarAppearance i nadać mu wartość NO.

 12
Author: Dima,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-10-09 01:23:28

Przejdź do informacji.plist i dodaj dwa klawisze:

Przejdź do informacji.plist i dodaj dwa klawisze:

 10
Author: janaz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-06-25 11:52:51

Sam to rozgryzłem. Dodam moje rozwiązanie jako inną opcję.

extension UIViewController {
    func prefersStatusBarHidden() -> Bool {
        return true
    }
}
 8
Author: Jay,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-06-16 05:25:12

Ok, więc staje się to problemem dla mnie, ponieważ iOS 9 nie obsługuje żadnej powyższej metody, o której ludzie tutaj wspomniali, takiej jak UIApplication.sharedApplication().statusBarHidden = true lub

UIApplication.sharedApplication().setStatusBarHidden(true, withAnimation: UIStatusBarAnimation.None)

I

override func prefersStatusBarHidden() -> Bool {
     return true
}

Działa, ale nie zapewnia programowalnego rozwiązania, w którym mogę zmienić pod warunkiem. (statusBarHidden = true i statusBarHidden = false Jak to robiliśmy wcześniej).

Rozwiązanie tego szaleństwa:

Dodając do prefersStatusBarHidden() jak poniżej możesz programowo sterować ukrywaniem i pokazywaniem paska stanu bez dodawania ustawień UIViewControllerBasedStatusBarAppearance do informacji .plist :

var showStatusBar = true

override func prefersStatusBarHidden() -> Bool {
     if showStatusBar {
         return false
     }
     return true
}

private func showStatusBar(enabled: Bool) {
    showStatusBar = enabled
    prefersStatusBarHidden()
}

Następnie użyj go w ten sposób w całym swoim kodzie:

//Hide Status Bar
showStatusBar(false)

Lub

//Show Status Bar
showStatusBar(true)
 4
Author: CodeOverRide,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-02-25 00:43:18

Aby dodać, przy nadpisywaniu prefersStatusBarHidden metody lub zmiennej, View controller-based status bar appearance W Info.plist musi być tak, w przeciwnym razie obejście nie będzie miało żadnego efektu

 2
Author: Huanyan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-01-17 19:08:37

W moim przypadku Szukałem paska stanu, aby ukryć / pokazać na żądanie; zamiast po prostu, gdy Widok ładuje się lub znika.

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()
 2
Author: Felecia Genet,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-04-10 23:54:34

Używam Xcode 8.1 (8B62) z celem wdrożenia ustawionym na 10.1 i nie miałem dużo szczęścia z opcjami nadpisywania wspomnianymi powyżej. Jednak sprawdzanie opcji "Ukryj pasek stanu" w informacji o wdrożeniu załatwiło mi sprawę.

Projekt > Ogólne

Mam nadzieję, że to pomoże.

 0
Author: danmerfeld,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-11-17 21:24:28
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
        application.isStatusBarHidden = true
        return true
    }
 0
Author: Prasad Bulbule,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-08-10 09:30:27

Możesz użyć tego kodu w swoim ViewController Class scope

open override var prefersStatusBarHidden: Bool { return true }
 0
Author: Sajjad,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-08-30 06:17:28

W Twoim projekcie->Ogólne - > informacje o wdrożeniu

Styl Statusbar:--

Po prostu zaznaczony pasek stanu Ukryj (iOS 10)

 0
Author: V D Purohit,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-12-07 07:12:45

Rozwiązanie, które działa dla mnie; jeśli chcesz ukryć pasek stanu na określonym kontrolerze widoku podczas ładowania:

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()
    }
}

Uwaga: Jeśli ustawisz klucz " Wyświetl pasek stanu oparty na kontrolerze appearance" na " NO" w informacji.plist powyższy kod nie działa. Powinieneś ustawić klucz na " YES " lub Usuń z info.plist

 0
Author: andre_hold,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-02-21 14:23:17

Swift 4

//MARK:- Show Status Bar
UIApplication.shared.isStatusBarHidden = true

//MARK:- Hide Status Bar
UIApplication.shared.isStatusBarHidden = false
 0
Author: Shakeel Ahmed,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-04-24 09:48:32

W Twoim projekcie Ogólne - > informacje o wdrożeniu - > styl paska stanu zaznacz zaznaczenie paska stanu Ukryj Uwaga: - ukrywa pasek stanu w całej aplikacji

 0
Author: Sweta Vani,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-16 05:56:16
self.navigationController?.isNavigationBarHidden = true
 -2
Author: kiran pm,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-11-29 11:28:32