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 UIViewControllerBasedStatusBarAppearance
się YES
w pliku .plist.
W viewDidLoad
zrobić[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 appearance
się NO
w twojej Info.plist
.[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
Uwaga: ta metoda jest przestarzała w iOS9. preferredStatusBarStyle
Zamiast 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)
NO
NO
UIStatusBarStyleLightContent
w plist info
Istnieje jednak Transparent Black
któ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.plist
dodaj wiersz:
UIViewControllerBasedStatusBarAppearance
i ustaw wartość NO
.
Następnie w AppDelegate w didFinishLaunchingWithOptions
dodaj 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 target
Dodaj 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 UIViewControllerBasedStatusBarAppearance
na NO
w
Info.plist
.
W ViewDidLoad
metodzie 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 appearance
naNO
Status bar style
naUIStatusBarStyleLightContent
Nastę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 equal
TO NO
był 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 appearance
na „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
preferredStatusBarStyle
i - 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 appearance
wł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 appearance
w 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 String
i 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.plist
put View controller-based status bar appearance
jakoNO
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 AppDelegate
prac 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
UIStatusBarStyle
stałej, aby określić, czy zawartość paska stanu powinna być ciemna czy jasna:
UIStatusBarStyleDefault
wyświetla ciemną zawartość. [...]
UIStatusBarStyleLightContent
wyś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
UIViewControllerBasedStatusBarAppearance
klucz do pliku aplikacjiInfo.plist
i 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 UIViewControllerBasedStatusBarAppearance
na NO
w pliku `.plist '.
jeśli chcesz ustawić styl paska stanu, na poziomie kontrolera widoku, wykonaj następujące kroki:
UIViewControllerBasedStatusBarAppearance
się YES
w .plist
pliku, 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 appearance
w 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!