Moja aplikacja ma ciemne tło, ale w iOS 7 pasek stanu stał się przezroczysty. Nic tam nie widzę, tylko zielony wskaźnik baterii w rogu. Jak mogę zmienić kolor tekstu paska stanu na biały, tak jak na ekranie głównym?
Moja aplikacja ma ciemne tło, ale w iOS 7 pasek stanu stał się przezroczysty. Nic tam nie widzę, tylko zielony wskaźnik baterii w rogu. Jak mogę zmienić kolor tekstu paska stanu na biały, tak jak na ekranie głównym?
Odpowiedzi:
Ustaw UIViewControllerBasedStatusBarAppearancesię YESw pliku .plist.
W viewDidLoadzrobić[self setNeedsStatusBarAppearanceUpdate];
Dodaj następującą metodę:
- (UIStatusBarStyle)preferredStatusBarStyle
{
return UIStatusBarStyleLightContent;
}
Uwaga : To nie działa dla kontrolerów wewnątrz UINavigationController, zobacz komentarz Tysona poniżej :)
Swift 3 - To zadziała kontrolery wewnątrz UINavigationController. Dodaj ten kod do kontrolera.
// Preferred status bar style lightContent to use on dark background.
// Swift 3
override var preferredStatusBarStyle: UIStatusBarStyle {
return .lightContent
}
Swift 5 i SwiftUI
Dla SwiftUI utwórz nowy plik swift o nazwie HostingController.swift
import Foundation
import UIKit
import SwiftUI
class HostingController: UIHostingController<ContentView> {
override var preferredStatusBarStyle: UIStatusBarStyle {
return .lightContent
}
}
Następnie zmień następujące wiersze kodu w SceneDelegate.swift
window.rootViewController = UIHostingController(rootView: ContentView())
do
window.rootViewController = HostingController(rootView: ContentView())
Alternatywnie możesz zrezygnować z wyglądu paska stanu opartego na kontrolerze widoku:
View controller-based status bar appearancesię NOw twojej Info.plist.[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];Uwaga: ta metoda jest przestarzała w iOS9. preferredStatusBarStyleZamiast tego użyj w UIViewController. (patrz Biblioteka programistów Apple )
Możesz to zrobić bez pisania wiersza kodu!
Wykonaj następujące czynności, aby kolor paska stanu był biały w całej aplikacji
Na twoim projekcie plik plist :
Transparent black style (alpha of 0.5)NONOUIStatusBarStyleLightContentw plist infoIstnieje jednak Transparent Blackktóry zrobi ten sam trik :) plus trzeba dodać View controller-based status bar appearance, jak to pierwotnie nie istnieje i to wszystko, czego potrzebujesz, aby zmusić go do pracy :)
<key>UIStatusBarStyle</key> <string>UIStatusBarStyleLightContent</string> <key>UIViewControllerBasedStatusBarAppearance</key> <false/>
Uwaga: większość pozytywnych odpowiedzi nie działa w systemie iOS 7/8
W Info.plist ustaw „Wyświetl wygląd paska stanu kontrolera” na NIE
W AppDelegate dodaj
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
do
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{
......
...
}
To rozwiązanie działa na iOS 7/8
Dla mnie nic się nie stało z użyciem wszystkich rzeczy w innych odpowiedziach (i z innych źródeł / dokumentacji). Pomogło mi ustawienie stylu paska nawigacji na „Czarny” w XIB. Spowodowało to zmianę tekstu na biały bez żadnego kodu.

Nic z tego nie działało, więc oto działające rozwiązanie ...
W Info.plistdodaj wiersz:
UIViewControllerBasedStatusBarAppearancei ustaw wartość NO.
Następnie w AppDelegate w didFinishLaunchingWithOptionsdodaj następujące wiersze:
[application setStatusBarHidden:NO];
[application setStatusBarStyle:UIStatusBarStyleLightContent];
Nie musisz robić do tego żadnego kodu
Musisz dodać klucz „Wyświetl pasek stanu oparty na kontrolerze” w info.plist w następujący sposób: 
i ustaw jego typ wartości na Boolean, a wartość na NO. Następnie kliknij ustawienia projektu, a następnie kliknij kartę Ogólne i w obszarze Informacje o wdrażaniu ustaw preferowany styl paska stanu na. Podświetl w następujący sposób:
Otóż to.
Tylko dwa kroki w następujący sposób:
Krok 1:
Na karcie Informacje w project targetDodaj wiersz:
UIViewControllerBasedStatusBarAppearance, ustaw wartość NO.
Krok 2:
W projekcie AppDelegate.m:
- (BOOL)application:(UIApplication *)application
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{
…
[application setStatusBarStyle:UIStatusBarStyleLightContent];
…
}
Działa to w wersjach Golden Master iOS 7 i Xcode 5 GM oraz iOS7 SDK wydanych 18 września 2013 r. (Przynajmniej z ukrytym kontrolerem nawigacyjnym):
Ustaw the UIViewControllerBasedStatusBarAppearancena NOw
Info.plist.
W ViewDidLoadmetodzie lub w dowolnym miejscu, gdzie chcesz zmienić styl paska stanu:
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
W przypadku, gdy Twój UIViewController znajduje się w UINavigationController, będziesz musiał ustawić BarStyle:
-[UINavigationBar setBarStyle:UIBarStyleBlack]
Oryginalna odpowiedź jest tutaj
Jeśli masz wbudowany kontroler nawigacyjny utworzony za pomocą Konstruktora interfejsów , pamiętaj, aby ustawić następujące parametry w klasie zarządzającej kontrolerem nawigacyjnym:
-(UIStatusBarStyle)preferredStatusBarStyle{
return UIStatusBarStyleLightContent;
}
To powinno być wszystko, czego potrzebujesz.
Używam Xcode 6 beta 5 w projekcie Swift dla aplikacji na iOS 7.
Oto co zrobiłem i działa:
info.plist:

W AppDelegate.m dodaj następujące elementy.
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
}
A w pliku Plist ustaw „Wyświetl wygląd paska stanu kontrolera” na NIE.
Po prostu w Appdelegate
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
Cóż, to naprawdę działa dla mnie jak bułka z masłem.
Przejdź do swojej aplikacji info.plist.
View controller-based status bar appearancenaNOStatus bar stylenaUIStatusBarStyleLightContentNastępnie przejdź do delegata aplikacji i wklej następujący kod, w którym ustawiasz RootViewController systemu Windows.
#define SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedAscending)
if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"7.0"))
{
UIView *view=[[UIView alloc] initWithFrame:CGRectMake(0, 0,320, 20)];
view.backgroundColor=[UIColor colorWithRed:0/255.0 green:0/255.0 blue:0/255.0 alpha:1.0];
[self.window.rootViewController.view addSubview:view];
}
Bingo To działa dla mnie.
View controller-based status bar appearance equalTO NObył kawałek mi brakuje. Dzięki
W Swift 3 jest bardzo łatwy, wystarczy 2 kroki. Przejdź do swojej info.plist i zmień klucz View controller-based status bar appearancena „NIE”. Następnie w Appdelegate po prostu dodaj ten wiersz do metody didfinishlaunchingwithoptions
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
// Override point for customization after application launch.
UIApplication.shared.statusBarStyle = .lightContent
return true
}
to zostało przestarzałe w iOS9, teraz powinieneś zastąpić tę właściwość w rootviewcontroller
zrobienie tego zostało przestarzałe w iOS 9 powinno to zrobić na rootviewcontroller
override var preferredStatusBarStyle: UIStatusBarStyle {
return .lightContent
}
iOS 7 pozwala poszczególnym kontrolerom widoków określać wygląd paska stanu, jak opisano w dokumentacji dla deweloperów Apple:
iOS 7 daje kontrolerom widoków możliwość dostosowania stylu paska stanu podczas działania aplikacji. Dobrym sposobem na dynamiczną zmianę stylu paska stanu jest wdrożenie
preferredStatusBarStylei - w bloku animacji - zaktualizowanie wyglądu paska stanu i wywołaniasetNeedsStatusBarAppearanceUpdate.
Globalne ustawienie wyglądu paska stanu jest procesem dwuetapowym.
Najpierw musisz powiedzieć iOSowi, że nie chcesz ustawiać wyglądu paska stanu na podstawie widoku po widoku.
Następnie musisz przejąć kontrolę i faktycznie ustawić nowy styl globalnego paska stanu.
Aby wyłączyć kontrolę paska stanu widok po widoku, musisz ustawić View controller-based status bar appearancewłaściwość w Info.plist.
Otwórz Nawigator projektu i wybierz projekt dla aplikacji na iOS, a następnie wybierz kartę Informacje.
Najedź kursorem na wiersz, a następnie kliknij wyświetlony znak plus, aby dodać nową właściwość do swojej .plist.
Wpisz View controller-based status bar appearancew polu Klucz, a następnie upewnij się, że pole Typ jest ustawione na Boolean. Na koniec wprowadźNO w polu Wartość.
Aby ustawić styl globalny dla paska stanu, dodaj inną właściwość w zakładce Informacje za pomocą klawisza Status bar style, typu Stringi wartości Opaque black style.
Oto post na blogu z nieco bardziej szczegółowymi informacjami i przykładowym kodem:
http://codebleep.com/setting-the-status-bar-text-color-in-ios-7/
Nie musisz nic więcej robić, po prostu napisz ten kod w swoim viewController i uzyskaj biały pasek stanu
- (UIStatusBarStyle)preferredStatusBarStyle{return UIStatusBarStyleLightContent;}
Odpowiedź zaktualizowana dla dla Xcode GM Seed:
W Info.plistput View controller-based status bar appearancejakoNO
W projekcie ustaw:

W ViewDidLoad:
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
Myślę, że wszystkie odpowiedzi tak naprawdę nie wskazują na problem, ponieważ wszystkie działają w określonych scenariuszach. Ale jeśli musisz uwzględnić wszystkie sprawy, postępuj zgodnie z poniższymi punktami:
W zależności od tego, gdzie potrzebujesz stylu światła paska stanu, zawsze powinieneś pamiętać o tych 3 punktach:
1) Jeśli potrzebujesz paska stanu na ekranie uruchamiania lub w innych miejscach, w których nie możesz go kontrolować (nie w kontrolerach widoku, ale raczej w niektórych elementach / momentach kontrolowanych przez system, takich jak ekran uruchamiania),
przechodzisz do ustawień projektu

2) jeśli masz kontroler w kontrolerze nawigacyjnym Możesz to zmienić w kreatorze interfejsów w następujący sposób:
a) Wybierz pasek nawigacyjny kontrolera nawigacyjnego

b) Następnie ustaw styl paska nawigacyjnego na „Czarny”, ponieważ oznacza to, że pod paskiem stanu masz „czarne” -> ciemne tło, dzięki czemu pasek stanu będzie biały
Lub zrób to w kodzie w następujący sposób
navigationController?.navigationBar.barStyle = UIBarStyle.Black
3) Jeśli masz tylko kontroler, który musi mieć własny styl paska stanu i nie jest osadzony w jakiejś strukturze kontenera jako UINavigationController
Ustaw styl paska stanu w kodzie kontrolera:
Po prostu dzwonię
[[UINavigationBar appearance] setBarStyle:UIBarStyleBlack];
w
-(BOOL)application:(UIApplication *)application
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
}
metoda moich AppDelegateprac jest dla mnie świetna w iOS7.
View controller-based status bar appearance = NO
Jest to udokumentowane w Przewodniku przejścia do interfejsu użytkownika systemu iOS 7 , do którego bezpośredniego dostępu potrzebujesz identyfikatora programisty Apple. Odpowiedni fragment:
Ponieważ pasek stanu jest przezroczysty, widok za nim jest widoczny. [...] Użyj
UIStatusBarStylestałej, aby określić, czy zawartość paska stanu powinna być ciemna czy jasna:
UIStatusBarStyleDefaultwyświetla ciemną zawartość. [...]
UIStatusBarStyleLightContentwyświetla jasną zawartość. Użyj, gdy ciemna zawartość znajduje się za paskiem stanu.
Być może również interesujące:
W systemie iOS 7 możesz kontrolować styl paska stanu z poziomu pojedynczego kontrolera vew i zmieniać go podczas działania aplikacji. Aby włączyć to zachowanie, dodaj
UIViewControllerBasedStatusBarAppearanceklucz do pliku aplikacjiInfo.plisti nadaj mu wartośćYES.
Zdecydowanie polecam przejrzenie dokumentu, do którego ponownie można uzyskać dostęp za pomocą identyfikatora programisty Apple.
Oto Wskazówki / instrukcje Apple dotyczące zmiany paska stanu. Na pasku stanu dozwolone są tylko Ciemne i jasne (podczas gdy i czarne).
Oto - Jak zmienić styl paska stanu:
Jeśli chcesz ustawić styl paska stanu, poziom aplikacji, a następnie ustaw UIViewControllerBasedStatusBarAppearancena NOw pliku `.plist '.
jeśli chcesz ustawić styl paska stanu, na poziomie kontrolera widoku, wykonaj następujące kroki:
UIViewControllerBasedStatusBarAppearancesię YESw .plistpliku, jeśli trzeba ustawić status bar w stylu tylko na poziomie UIViewController.W funkcji dodawania viewDidLoad - setNeedsStatusBarAppearanceUpdate
przesłonić preferowanyStatusBarStyle w kontrolerze widoku.
-
override func viewDidLoad() {
super.viewDidLoad()
self.setNeedsStatusBarAppearanceUpdate()
}
override var preferredStatusBarStyle: UIStatusBarStyle {
return .lightContent
}
Ustaw wartość .plist zgodnie z poziomem konfiguracji stylu paska stanu.

Oto sztuczka polegająca na zmianie / ustawieniu koloru tła paska stanu podczas uruchamiania aplikacji lub podczas viewDidLoad kontrolera widoku.
extension UIApplication {
var statusBarView: UIView? {
return value(forKey: "statusBar") as? UIView
}
}
// Set upon application launch, if you've application based status bar
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
UIApplication.shared.statusBarView?.backgroundColor = UIColor.red
return true
}
}
or
// Set it from your view controller if you've view controller based statusbar
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
UIApplication.shared.statusBarView?.backgroundColor = UIColor.red
}
}
Oto wynik:

Zrobiłem kilka rzeczy inaczej i to działa dla mnie.
Bez zmian w kodzie skonfigurowałem mój plik .plist w następujący sposób:
Mam nadzieję, że to pomoże.
Dla każdego kontrolera widoku zmieniam właściwość Symulowane metryki „paska stanu” w serii ujęć z „wywnioskowanej” na „lekką treść”
Jeśli nadal chcesz używać View controller-based status bar appearancew info.plist ustawionym na TAK, co oznacza, że możesz zmienić pasek stanu dla każdego kontrolera widoku, użyj następującego tekstu dla białego tekstu na pasku stanu w ViewDidLoad:
[[[self navigationController] navigationBar] setBarStyle:UIBarStyleBlackTranslucent];
w info.plist ustaw wartość pola NIE Wyświetl wygląd paska stanu na kontrolerze i ustaw lampkę stylu paska stanu w ustawieniu target> ustawienie ogólne.
Pozwól, że dam ci pełną odpowiedź na twoje pytanie. Zmiana koloru tekstu paska stanu jest bardzo łatwa, ale w iOS 7 jest trochę myląca, szczególnie dla początkujących.
Jeśli próbujesz zmienić kolor z czarnego na biały w Storyboard, wybierając kontroler widoku i przechodząc do Symulacji symulowanych po prawej stronie, to nie zadziała i nie wiem dlaczego. Powinno działać, zmieniając w ten sposób, ale w dowolny sposób.
Po drugie, nie znajdziesz właściwości UIViewControllerBasedStatusBarAppearance w swoim plist, ale domyślnie jej nie ma. Musisz dodać go samodzielnie, klikając przycisk +, a następnie ustawiając go na NIE.
Kolor tekstu paska stanu iOS 7
Na koniec musisz przejść do pliku AppDelegate.m i dodać następującą metodę didFinishLaunchingWithOptions, dodać następujący wiersz:
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
Spowoduje to zmianę koloru na biały dla wszystkich kontrolerów widoku. Mam nadzieję że to pomoże!