Zmiana koloru paska stanu dla określonych kontrolerów widoku za pomocą Swift w iOS8
override func preferredStatusBarStyle() -> UIStatusBarStyle {
return UIStatusBarStyle.LightContent;
}
Użycie powyższego kodu w dowolnym Viewcontrollerze, aby ustawić kolor paska stanu na Biały dla określonego viewcontrollera doesnt work in iOS8 for me. Jakieś sugestie? Korzystanie z aplikacji.metoda sharedApplication, kolor zmienia się po wymaganych zmianach w informacji.plist dla całej aplikacji.
// Change the colour of status bar from black to white
UIApplication.sharedApplication().statusBarStyle = .LightContent
Jak mogę po prostu wprowadzić zmiany w Kolorze paska stanu dla niektórych wymaganych i szczegółowe Kontrolery widoków?
24 answers
Po przeczytaniu wszystkich sugestii i wypróbowaniu kilku rzeczy, mogłem uruchomić to dla konkretnych kontrolerów viewcontrollerów, wykonując następujące kroki:]}
Pierwszy Krok:
Otwórz swoje informacje.plist i włóż nowy klucz o nazwie " Zobacz wygląd paska stanu opartego na kontrolerze", aby Nie.
Drugi krok (tylko Wyjaśnienie, nie trzeba tego wdrażać):
Normalnie umieszczamy następujący kod w aplikacja (_: didFinishLaunchingWithOptions:) metoda AppDelegate,
Swift 2
UIApplication.sharedApplication().statusBarStyle = .LightContent
Swift 3
UIApplication.shared.statusBarStyle = .lightContent
Ale to wpływa na statusBarStyle
wszystkich kontrolerów widoku.
Tak więc, jak to działa dla konkretnych kontrolerów Viewcontrollerów-ostatni krok:
Otwórz plik viewcontroller, w którym chcesz zmienić statusBarStyle
i umieść następujący kod w viewWillAppear()
,
Swift 2
UIApplication.sharedApplication().statusBarStyle = .LightContent
Swift 3
UIApplication.shared.statusBarStyle = .lightContent
Zaimplementuj również metodę viewWillDisappear()
dla tego konkretnego kontrolera viewcontrollera i umieść następujące linie kodu,
Swift 2
override func viewWillDisappear(animated: Bool) {
super.viewWillDisappear(animated)
UIApplication.sharedApplication().statusBarStyle = UIStatusBarStyle.Default
}
Swift 3
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
UIApplication.shared.statusBarStyle = UIStatusBarStyle.default
}
Ten krok najpierw zmieni statusBarStyle
dla określonego viewcontrollera, a następnie zmieni go z powrotem na default
, gdy określony viewcontroller zniknie. Nie implementacja viewWillDisappear()
zmieni na stałe statusBarStyle
na nową zdefiniowaną wartość UIStatusBarStyle.LightContent
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-03-17 12:22:45
(od maja 23, 2018)
Swift 3 i Swift 4
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
UIApplication.shared.statusBarStyle = .lightContent
}
override var preferredStatusBarStyle : UIStatusBarStyle {
return .lightContent
}
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-24 19:20:10
Zastosowałem się do tego tutoriala i zadziałało na mnie. Nie jestem jednak pewien, czy są jakieś zastrzeżenia.
Https://coderwall.com/p/dyqrfa/customize-navigation-bar-appearance-with-swift
- otwórz swoje informacje.plist I set
UIViewControllerBasedStatusBarAppearance
dofalse
. - w pierwszej funkcji
AppDelegate.swift
, która zawieradidFinishLaunchingWithOptions
, ustaw żądany kolor.
UIApplication.sharedApplication().statusBarStyle = UIStatusBarStyle.LightContent
-
Swift 3 Update *
UIApplication.wspólne.statusBarStyle = .lightContent
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-11 12:01:40
W Twoich informacjach.plist musisz zdefiniować wygląd paska stanu w oparciu o kontroler widoku na dowolną wartość.
Jeśli zdefiniujesz ją tak, powinieneś zastąpić funkcję preferredStatusBarStyle w każdym kontrolerze widoku.
Jeśli zdefiniujesz go NO, możesz ustawić styl w AppDelegate używając
UIApplication.sharedApplication().setStatusBarStyle(UIStatusBarStyle.LightContent, animated: true)
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-07-23 09:00:03
override func viewWillAppear(animated: Bool) {
self.navigationController?.navigationBarHidden = true
UIApplication.sharedApplication().statusBarHidden = false
UIApplication.sharedApplication().statusBarStyle = .LightContent
let statusBar: UIView = UIApplication.sharedApplication().valueForKey("statusBar") as! UIView
if statusBar.respondsToSelector("setBackgroundColor:") {
statusBar.backgroundColor = UIColor.redColor()
}
}
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-05-11 08:38:03
Jest tu miliard odpowiedzi, więc pomyślałem, dlaczego nie dodać kolejnej w formie rozszerzenia (z pomocą @Cœur)
Swift 3
Rozszerzenie:
extension UIApplication {
class var statusBarBackgroundColor: UIColor? {
get {
return (shared.value(forKey: "statusBar") as? UIView)?.backgroundColor
} set {
(shared.value(forKey: "statusBar") as? UIView)?.backgroundColor = newValue
}
}
}
Realizacja:
UIApplication.statusBarBackgroundColor = .blue
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-03-13 22:49:11
SWIFT 2
Udało mi się z powodzeniem zmienić wygląd tła paska stanu, dodając w moim viewWillAppear:
let statusBar: UIView = UIApplication.sharedApplication().valueForKey("statusBar") as! UIView
if statusBar.respondsToSelector(Selector("setBackgroundColor:")) {
statusBar.backgroundColor = .redColor()
}
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-07-26 04:23:31
Swift 3
let statusBar: UIView = UIApplication.shared.value(forKey: "statusBar") as! UIView
if statusBar.responds(to: #selector(setter: UIView.backgroundColor)) {
statusBar.backgroundColor = UIColor.black
}
To rozwiązanie służące do ustawiania koloru tła paska stanu dla określonego kontrolera widoku.
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-24 10:09:42
Zaimplementuj preferredStatusBarStyle
jak już wspomniałeś i wywołaj self.setNeedsStatusBarAppearanceUpdate()
w ViewDidLoad
i
również w Info.plist ustawia UIViewControllerBasedStatusBarAppearance
na YES
(domyślnie jest to YES
)
Nie jest jasne, dlaczego nie działa.Muszę sprawdzić kod.Jeszcze jedna sugestia to
go with working code in viewDidLoad
UIApplication.sharedApplication().statusBarStyle = .LightContent
i zmień to na domyślne po wyświetleniu get disappeared viewWillDisappear
.
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-17 17:00:13
W mojej sytuacji używam storyboardu do organizowania kontrolerów widoku.Chcę zmienić styl paska stanu.
Możesz zobaczyć na zdjęciu poniżej.
Stars
kontroler widoku jest CPBaseNavigationController
, a {[3] } jest podklasą UINavigationController
.
Staram się robić następne sety:
-
W
AppDelegate.swift
funcdidFinishLaunchingWithOptions
, Dodaj//change status bar color UIApplication.sharedApplication().statusBarHidden = false UIApplication.sharedApplication().statusBarStyle = .LightContent
Ale bez efektu.
W StoryBoard,znaleźć
Base Tab BarController
(zdjęcie na powyższym).wybierzAttributes Inspector
, ZmieńSattus Bar
przypisać doLight Content
. tak źle, brak efektu.
-
Last I get it.In my custom navigation controller
CPBaseNavigationController
, add funcpreferredStatusBarStyle
To działa dobrze!override func preferredStatusBarStyle() -> UIStatusBarStyle { return .LightContent }
Poza tym, statusBarStyle
przestarzałe w 9.0, można użyć -[UIViewController preferredStatusBarStyle]
.
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-04-10 03:09:07
Dla swift 3
.plist
View controller-based status bar appearance = NO
AppDelegate.swift
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
// Custom statubar
UIApplication.shared.isStatusBarHidden = false
UIApplication.shared.statusBarStyle = .lightContent
let statusBar: UIView = UIApplication.shared.value(forKey: "statusBar") as! UIView
statusBar.backgroundColor = UIColor.gray
return true
}
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-05-05 04:06:12
Działa dla aplikacji opartych na Nawigacji
var addStatusBar = UIView()
addStatusBar.frame = CGRectMake(0, 0, UIScreen.mainScreen().bounds.width, 20);
addStatusBar.backgroundColor = global().UIColorFromRGB(0x65b4d9)
self.window?.rootViewController?.view .addSubview(addStatusBar)
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-04-18 07:42:56
Swift 3
//
// LoginController.swift
// Swift 3
//
// Created by The Crab on 17/01/2017.
// Copyright © 2017 Paxi Labs. All rights reserved.
//
import UIKit
class LoginController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
setNeedsStatusBarAppearanceUpdate()
view.backgroundColor = UIColor(red: 61/255, green: 91/255, blue: 151/255, alpha: 1)
}
override var preferredStatusBarStyle: UIStatusBarStyle {
return .lightContent
}
}
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-03-12 15:33:52
Wszystko jest o wiele łatwiejsze w Swift 3.0 Xcode 8
Używając poniższego kodu w pliku App Delegate, po
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
Wstaw to:
UINavigationBar.appearance().barStyle = .black
UINavigationBar.appearance().barTintColor = UIColor(red: 230, green: 32, blue: 31, alpha: 1.0)
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-07 00:18:40
Ustawiłem konkretny kolor (w formacie RGB) używając poniższego kodu w pliku App Delegate
:
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
. . .
UIApplication.sharedApplication().statusBarHidden = false
UIApplication.sharedApplication().statusBarStyle = .LightContent
let statusBar: UIView = UIApplication.sharedApplication().valueForKey("statusBar") as! UIView
if statusBar.respondsToSelector(Selector("setBackgroundColor:")) {
statusBar.backgroundColor = UIColor.init(red: 0.1, green: 0.27, blue: 0.60, alpha: 1.0)
}
. . .
}
Należy również dodać poniżej klucz w pliku Info.plist
:
Zobacz wygląd paska stanu opartego na kontrolerze z wartością logiczną ustawioną na NO
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-08-23 09:41:41
Swift 4 dla konkretnego Viewcontrollera bez navigationViewController embedded wystarczy dodać to do pliku ViewController.
override var preferredStatusBarStyle : UIStatusBarStyle {
return .lightContent
}
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-20 05:27:26
Mogę zaproponować Ci prostszy sposób,
- po prostu wywołaj setNeedsStatusBarAppearanceUpdate w viewDidLoad, jak mówi Apple docs,
Wywołaj tę metodę, jeśli zmienią się atrybuty paska stanu kontrolera widoku, takie jak ukryty/Ukryty status lub styl. Jeśli wywołasz tę metodę w bloku animacji, zmiany zostaną animowane wraz z resztą bloku animacji.
- zaimplementuj preferredStatusBarStyle zwracając swój preferowany typ.
Objective C
[self setNeedsStatusBarAppearanceUpdate];
-(UIStatusBarStyle)preferredStatusBarStyle {
return UIStatusBarStyleLightContent;
}
Swift
setNeedsStatusBarAppearanceUpdate()
var preferredStatusBarStyle: UIStatusBarStyle {
return .lightContent
}
Dziwię się, że nikt tego nie zauważył. W każdym razie enjoy :)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 15:31:47
Miałem z tym problem. Nie czułem się dobrze z globalną zmianą koloru paska stanu w widoku, a następnie zmiana go z powrotem na widok zniknęła, jak zaakceptowana odpowiedź. Wierz lub nie, możesz to uruchomić, nadpisując preferredStatusBarStyle
na żądanym kontrolerze widoku. Po długim czasie to właśnie zrobiłem, aby to działało:
- Zmień wygląd paska stanu opartego na kontrolerze widoku w twoim
info.plist
na tak. - teraz każdy kontroler widoku pełnoekranowego może Zmień styl paska stanu przez nadpisanie
preferredStatusBarStyle
. - określam tryb pełnoekranowy, ponieważ nie będzie to działać dla kontrolerów widoku modalnego (nie pełnoekranowego), nie bez Ustawienia
modalPresentationCapturesStatusBarAppearance
na Yes that is. -
Również jeśli masz wbudowane Kontrolery widoku, jak na przykład w kontrolerze nawigacyjnym, zapyta najwyższy kontroler widoku o Styl paska stanu. Nadpisanie
childViewControllerForStatusBarStyle
i podanie wbudowanego kontrolera widoku powinno działać, ale nie dla mnie. Więc właśnie zwróciłem wbudowany wyświetl Kontrolery preferowany pasek stanu jako preferowany styl paska stanu. Coś takiego:override var preferredStatusBarStyle: UIStatusBarStyle { if let topViewController = viewControllers.last { return topViewController.preferredStatusBarStyle } return .default }
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-03-15 02:01:29
Swift 3.0 Update
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
UIApplication.shared.statusBarStyle = .lightContent
return true
}
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-05 19:17:25
Kliknij na grupę plików pomocniczych(lewa strona od góry - Nazwa projektu). Przejdź do informacji. Kliknij na + gdzieś pomiędzy listami, jak poniżej Nazwa pakietu. I dodaj "wyświetl wygląd paska stanu opartego na kontrolerze" i ustaw go na nie. Następnie otwórz AppDelegate.swift i modyfikuj tak:
func application(application: UIApplication!, didFinishLaunchingWithOptions launchOptions: NSDictionary!) -> Bool {
UIApplication.sharedApplication().setStatusBarStyle(UIStatusBarStyle.LightContent, animated: true)
return true
}
To wszystko.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-01-09 08:23:27
Literalnie wdałem się w ten sam problem. Zajęło mi to ponad 4 godziny. Próbowałem wszystkich odpowiedzi podanych tutaj i najlepsze co dostałem, to dostać się do pozycji na białym pasku stanu. Ale pozostałe bity, takie jak pasek baterii i inne, były nadal czarne, bez względu na to, co zrobiłem: jeśli chodzi o zastosowanie wszystkich rozwiązań podanych w tym pytaniu. Postanowiłem więc odtworzyć moje kroki i dowiedziałem się, że pobrałem zależność CocoaPod, która zmieniała normalne funkcje Xcode i kody do Zmień kolory. Dla mnie był to" Kameleonframework". Więc radzę sprawdzić swoje zależności zainstalowane z CocoaPods usuwając najnowsze, jeśli zastosowałeś wszystkie rozwiązania i nie działają dla Ciebie.
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-04-10 02:20:20
Co u mnie działało, w Storyboardzie przejdź do kontrolera nawigacji, wybierz pasek nawigacji, kliknij na Inspektora atrybutów, a następnie zmień styl z domyślny na czarny. To jest to!
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-14 22:52:12
Swift 3
W Twoim pliku AppDelegate
wewnątrz metody func application
let statusBar: UIView = application.value(forKey: "statusBar") as! UIView
statusBar.backgroundColor = .red
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-09-25 07:52:03
Swift 4.0 Proszę użyć tego kodu w" didFinishLaunchingWithOptions launchOptions: "Appdelegate class
UIApplication.shared.statusBarStyle = .lightContent let statusBar: UIView = UIApplication.shared.value(forKey: "statusBar") as! UIView if statusBar.responds(to: #selector(setter: UIView.backgroundColor)){ statusBar.backgroundColor = UIColor.black }
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-03 03:13:05