Po przeczytaniu wszystkich sugestii i wypróbowaniu kilku rzeczy, mogę sprawić, by działało to dla określonych kontrolerów widoku, wykonując następujące kroki:
Pierwszy krok:
Otwórz info.plist i wstaw nowy klucz o nazwie „ Wyświetl wygląd paska stanu kontrolera ” na NIE
Drugi krok (tylko wyjaśnienie, nie trzeba tego wdrażać):
Zwykle wstawiamy następujący kod do aplikacji (_: didFinishLaunchingWithOptions :) metody AppDelegate,
Swift 2
UIApplication.sharedApplication().statusBarStyle = .LightContent
Szybki 3
UIApplication.shared.statusBarStyle = .lightContent
ale wpływa to statusBarStyle
na wszystkie ViewControllers.
Jak więc uruchomić to dla określonych ViewControllerów - ostatni krok:
Otwórz plik viewcontroller, w którym chcesz zmienić, statusBarStyle
i wstaw następujący kod viewWillAppear()
,
Swift 2
UIApplication.sharedApplication().statusBarStyle = .LightContent
Szybki 3
UIApplication.shared.statusBarStyle = .lightContent
Ponadto zaimplementuj viewWillDisappear()
metodę dla tego konkretnego viewController i wstaw następujące wiersze kodu,
Swift 2
override func viewWillDisappear(animated: Bool) {
super.viewWillDisappear(animated)
UIApplication.sharedApplication().statusBarStyle = UIStatusBarStyle.Default
}
Szybki 3
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
UIApplication.shared.statusBarStyle = UIStatusBarStyle.default
}
Ten krok najpierw zmieni statusBarStyle
dla określonego kontrolera widoku, a następnie zmieni go z powrotem na default
zniknięcie określonego kontrolera widoku. Niewdrożenie viewWillDisappear()
spowoduje zmianę na statusBarStyle
stałe na nową zdefiniowaną wartośćUIStatusBarStyle.LightContent
Status bar is initially hidden = YES
w pliku info.plist, „Wyświetl wygląd paska stanu na kontrolerze = NIE” spowoduje ukrycie paska stanu.UIStatusBarStyle.Default
używaniaviewWillDisappear()
, powinieneś użyć goviewWillAppear()
do zainicjowania go, zamiastviewDidLoad()
.... w przeciwnym razie, jeśli wrócisz do tego widoku bez konieczności ponownego ładowania, nie zobaczysz tego,StatusBarStyle
czego oczekujesz.UIApplication.shared.statusBarStyle = .lightContent
(Od 20 września 2019 r.)
Swift 5 , Swift 4.2 , Swift 4
źródło
super.viewWillAppear
jeśli skopiujesz i wkleisz ten kodUIApplication.shared.statusBarStyle = .lightContent
wyników w tym ostrzeżeniu kompilatora: Setter dla 'statusBarStyle' był przestarzały w iOS 9.0: Użyj - [UIViewController preferStatusBarStyle]Wykonałem ten samouczek i zadziałało to dla mnie. Nie jestem jednak pewien, czy są jakieś zastrzeżenia.
https://coderwall.com/p/dyqrfa/customize-navigation-bar-appearance-with-swift
UIViewControllerBasedStatusBarAppearance
nafalse
.AppDelegate.swift
, która zawieradidFinishLaunchingWithOptions
, ustaw żądany kolor.UIApplication.sharedApplication().statusBarStyle = UIStatusBarStyle.LightContent
Aktualizacja Swift 3 *
UIApplication.shared.statusBarStyle = .lightContent
źródło
UIApplication.sharedApplication().statusBarHidden = false
do AppDelegate.swift didFinishLauchingWithOptionsRozwiązanie Swift 4.2 z NavigationController
Pierwszy krok:
Otwórz info.plist i wstawić nowy klucz o nazwie „ Widok kontroler oparty na wygląd paska stanu ” lub
UIViewControllerBasedStatusBarAppearance
na TAK pozwolić każdy VC używać swojej własności stanu.Drugi krok
W każdej VC, nadpisać preferredStatusBarStyle własności takiego:
Ostatni krok
Przesłonić preferredStatusBarStyle nieruchomość w niestandardowej klasy NavigationController:
źródło
Jest tu miliard odpowiedzi, więc pomyślałem, dlaczego nie dodać kolejnej w formie rozszerzenia (z pomocą @ Cœur)
Szybki 3
Rozbudowa:
Realizacja:
źródło
W swojej Info.plist musisz zdefiniować Wyświetl wygląd paska stanu oparty na kontrolerze na dowolną wartość.
Jeśli zdefiniujesz TAK, powinieneś zastąpić funkcję preferStatusBarStyle w każdym kontrolerze widoku.
Jeśli zdefiniujesz NIE, możesz ustawić styl w AppDelegate za pomocą
źródło
setStatusBarStyle
został wycofany z iOS 9.0źródło
valueForKey("statusBar")
może być niezgodne z wytycznymi AppleSzybki 3
To jest rozwiązanie do ustawiania koloru tła paska stanu dla określonego kontrolera widoku.
źródło
SWIFT 2
Udało mi się z powodzeniem zmienić wygląd tła paska stanu, dodając następujące elementy w moim widokuWillAppear:
źródło
Wdrożenie
preferredStatusBarStyle
jak wspomniano i wywołanieself.setNeedsStatusBarAppearanceUpdate()
wViewDidLoad
, a także w Info.plist zestawUIViewControllerBasedStatusBarAppearance
doYES
(Jest toYES
ustawienie domyślne)Nie jest jasne, dlaczego to nie działa. Muszę sprawdzić kod. Inną sugestią jest pójść z działającym kodem
viewDidLoad
UIApplication.sharedApplication().statusBarStyle = .LightContent
i zmienić go na domyślny, gdy widok zniknieviewWillDisappear
.źródło
dla szybkiego 3
.plist
AppDelegate.swift
źródło
W mojej sytuacji używam scenorysów do organizowania kontrolerów widoku. Chcę zmienić styl wszystkich pasków stanu.
Możesz zobaczyć na zdjęciu poniżej.
Stars
Zobacz Kontroler jestCPBaseNavigationController
, aCPBaseNavigationController
jest podklasąUINavigationController
.Próbuję wykonać kolejne ustawienia:
W
AppDelegate.swift
funcdidFinishLaunchingWithOptions
dodajale bez efektu.
W StoryBoard znajdź
Base Tab BarController
(obrazek powyżej) .selectAttributes Inspector
, zmieńSattus Bar
atrybut naLight Content
.so źle, bez efektu.Ostatni raz dostaję. W moim niestandardowym kontrolerze nawigacyjnym
CPBaseNavigationController
dodaj funcpreferredStatusBarStyle
To dobrze działa!
Poza tym,
statusBarStyle
przestarzałe w wersji 9.0, możesz użyć-[UIViewController preferredStatusBarStyle]
.źródło
Działa z aplikacją opartą na nawigacji
źródło
W Swift 3.0 Xcode 8 wszystko jest znacznie łatwiejsze
Za pomocą poniższego kodu w pliku delegowania aplikacji po
wstaw to:
źródło
Szybki 3
źródło
Swift 4 W przypadku konkretnego ViewController bez nawigacji ViewController osadzony wystarczy dodać to do pliku ViewController.
źródło
Innym naprawdę łatwym sposobem na wykonanie tej pracy jest po prostu rozszerzenie klasy UINavigationController.
Ponieważ przesłonięcie
preferredStatusBarStyle:
metody nie będzie działać, chyba że zrobimy to wewnątrz klasy UINavigationController.źródło
Ustawiłem określony kolor (w formacie RGB), używając poniższego kodu w
App Delegate
pliku:Musisz również dodać poniższy klucz w
Info.plist
pliku:Wyświetlanie wyglądu paska stanu opartego na kontrolerze z wartością logiczną ustawioną na NIE
źródło
Mogę zaproponować ci prostszy sposób,
To działało dla mnie w iOS 10.1.
Cel C
Szybki
Dziwi mnie, że nikt tego nie zauważył. W każdym razie ciesz się :)
źródło
Miałem z tym trochę problemów. Naprawdę nie czułem się dobrze z globalną zmianą koloru paska stanu, który pojawił się w widoku, a następnie zmiana go z powrotem w widoku zniknęła jak zaakceptowana odpowiedź. Wierzcie lub nie, można to zrobić, zastępując
preferredStatusBarStyle
żądany kontroler widoku. Po długim czasie zrobiłem to, aby to działało:info.plist
na TAK.preferredStatusBarStyle
.modalPresentationCapturesStatusBarAppearance
Tak.Również jeśli masz osadzone kontrolery widoku, na przykład w kontrolerze nawigacyjnym, zapyta najwyższy kontroler widoku o styl paska stanu. Przesłanianie
childViewControllerForStatusBarStyle
i przekazywanie osadzonego kontrolera widoku powinno działać, ale dla mnie nie. Właśnie zwróciłem wbudowany kontroler widoku preferowany pasek stanu jako preferowany styl paska stanu. Coś takiego:źródło
UINavigationController
i zastąpićchildViewControllerForStatusBarStyle
zmienną tam, wracającself.topViewController
.W Swift 4 lub 4.2
Możesz dodać na swoim vc
i ustaw wartość zwracaną na
dawny:
źródło
(Od 10 czerwca 2020 r.)
Swift 5 ( bez edycji
.Plist
pliku )Jeśli używasz
Storyboard
, przejdź doNavigationController
, wybierznavigationBar
, kliknijAttributes Inspector
, a następnie zmieństyle
. jeśli potrzebujeszlight content
( biały pasek stanu ) ustaw cokolwiek opróczdefault
powiedzmy, ustaw stylblack
A jeśli chceszdark content
( czarny pasek stanu ) ustaw godefault
.Ustawienie domyślne (
UIBarStyleDefault
) powoduje wyświetlenie ciemnegoUIStatusBarStyleDefault
paska stanu pierwszego planu . IUIBarStyleBlack
daUIStatusBarStyleLightContent
pasek stanu.Programowo
Bez paska nawigacyjnego ( edycja
.Plist
)dodaj
UIViewControllerBasedStatusBarAppearance
/View controller-based status bar appearance
doinfo.plist
, a ustawioną wartością jesttrue
.Override
preferredStatusBarStyle
nieruchomość w kontrolerzeźródło
Aktualizacja Swift 3.0
źródło
Co ze mną działało, w Storyboard, przejdź do kontrolera nawigacji, wybierz pasek nawigacyjny, kliknij Inspektora atrybutów, a następnie zmień styl z domyślnego na czarny. Otóż to!
źródło
SWIFT 4.2 Hej, chciałem podzielić się rozwiązaniem, które dla mnie zadziałało, które otrzymałem ze świetnego artykułu na ten ekskluzywny temat autorstwa Graiga Grummitta.
Krok 1 Jak inni wspominali DODAJ poniżej do twojego PLIST
Krok 2 w RootViewcontroller dodaj poniżej
Podczas aktualizowania albo właściwości
statusBarHidden
albovcStatusBarStyle
zadzwonisetNeedsStatusBarAppearanceUpdate()
i zaktualizuje pasek stanu o nowe wartości dla jednegoprefersStatusBarHidden
lubpreferredStatusBarStyle
. W mojej sytuacji musiałem zaktualizować te właściwości kontrolera widoku kontenera, który był rodzicem widocznego kontrolera podglądu dziecka. Zrobiłem to przy użyciu prostej metody delegowania.Oczywiście podczas tworzenia instancji childViewController (Visible VC) nie zapomnij ustawić MainViewcontroller (Container VC) jako jego delegata. Czasami tak robię. :)
Następnie w childViewController właśnie wywołałem metodę delegowania, gdy jest to konieczne, aby zaktualizować pasek stanu.
Jak wspomniano powyżej, Graig Grummitt szczegółowo omawia to rozwiązanie, a także współpracuje z UINavigationControllers. Link tutaj: Tajemniczy przypadek paska stanu
źródło
Kliknij grupę plików pomocniczych (u góry po lewej stronie - nazwa twojego projektu). Przejdź do informacji. Kliknij + gdzieś między listami, np. Poniżej nazwy pakietu. I dodaj „Wyświetl wygląd paska stanu na kontrolerze” i ustaw na NIE. Następnie otwórz AppDelegate.swift i zmodyfikuj w następujący sposób:
Otóż to.
źródło
W przypadku Xcode 10 możesz utworzyć klasę i umieścić ją przed klasą viewController, możesz wywołać tę klasę we wszystkich kontrolerach widoku potrzebny jest pasek stanu zawartości świetlnej ...
Teraz zmień klasę viewController w:
I to wszystko...
źródło
Działa w oparciu o nawigację dla określonego kontrolera widoku w swift4
źródło
OSTRZEŻENIE
Setter dla „statusBarStyle” był przestarzały w iOS 9.0: Użyj - [UIViewController preferStatusBarStyle]
więc moje rozwiązanie było następujące: utworzenie rozszerzenia z kontrolera nawigacyjnego:
a jeśli masz viewController, który będzie miał inny styl niż styl aplikacji, możesz to zrobić
powiedzmy, że masz styl statusu aplikacji
.default
i chcesz, aby ten ekran był.lightContent
tak, aby barStyle przyjmował.lightContent
jako wartość domyślną, to zmieni styl paska stanu na lightContent, a następnie upewnij się, że poviewWillDisappear
zmianie barStyle ponownie na styl paska stanu aplikacji co w naszym przypadku jest.default
.to działa dla mnie
źródło
Niestandardowy kolor paska stanu (iOS11 +, Swift4 +)
Jeśli szukasz rozwiązania, jak zmienić pasek stanu na niestandardowy kolor, jest to działające rozwiązanie.
źródło