Jak zmienić kolor tekstu paska stanu w iOS


Odpowiedzi:


1379
  1. Ustaw UIViewControllerBasedStatusBarAppearancesię YESw pliku .plist.

  2. W viewDidLoadzrobić[self setNeedsStatusBarAppearanceUpdate];

  3. 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())

78
Nie potrzebowałem kroku 2.
Jason Moore

37
Wygląda na to, że nie działa na iOS 7 Beta 5 z Xcode5-DP5. preferStatusBarStyle nie wydaje się być wywoływany.
wilsontgh,

18
UIViewControllerBasedStatusBarAppearance został zmieniony na Wyświetl pasek stanu oparty na kontrolerze w Xcode 5 GM seed
parilogiczny 11.11.2013

42
Otrzymałem odpowiedź na Xcode GM Seed: 1. W Info.plist umieść Wyświetl pasek stanu kontrolera jako NO 2. W appDelegate, w metodzie appDidFinishLaunching, wstaw [[Wygląd UIView] setTintColor: [UIColor whiteColor]];
parilogiczny

101
UINavigationController to szczególny przypadek, powyższe nie będzie działać. Spędziłam godziny, drapiąc się po głowie. Zobacz tutaj rozwiązanie: stackoverflow.com/a/19513714/505457
Tyson

848

Alternatywnie możesz zrezygnować z wyglądu paska stanu opartego na kontrolerze widoku:

  1. Ustaw View controller-based status bar appearancesię NOw twojej Info.plist.
  2. Połączenie [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];

Uwaga: ta metoda jest przestarzała w iOS9. preferredStatusBarStyleZamiast tego użyj w UIViewController. (patrz Biblioteka programistów Apple )


16
To znacznie lepsza i łatwiejsza trasa.
Mick Byrne,

227
Nie trzeba kodować. Wszystko to można zrobić z poziomu listy: (1) ustaw „Wyświetl wygląd paska stanu opartego na kontrolerze” na NIE, a (2) ustaw „Styl paska stanu” na „Nieprzezroczysty czarny styl”. (Surowe wartości to UIViewControllerBasedStatusBarAppearance -> NO i UIStatusBarStyle -> UIStatusBarStyleBlackOpaque)
SwiftArchitect

3
Pamiętaj, że musisz ustawić odpowiednią wartość info.plist na NIE, aby to działało.
Abhi Beckert

9
@gothicdev: nice catch. Przyjmę twoją odpowiedź, ponieważ jest najczystsza. Opcją światła dla stylu paska może być: UIStatusBarStyleLightContent
benka

9
Ta metoda jest przestarzała w iOS 9.
lostAtSeaJoshua

439

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 :

  • Styl paska stanu: Transparent black style (alpha of 0.5)
  • Wyświetl wygląd paska stanu kontrolera: NO
  • Pasek stanu jest początkowo ukryty: NO

12
Nie wiem, czy coś się zmieniło, ale wartość UIStatusBarStyleLightContent nie jest rozpoznawana przez XCode i nie znajduje się w żadnej dokumentacji ... Chociaż wydaje się, że działa.
Nathan H

5
Ten również zmienił go na ekranie powitalnym, a samo ustawienie go w nawigatorze nie… Kudos!
viniciusnz

3
Zdecydowanie najłatwiejszy sposób, aby to zrobić i jak wspomniano, działa również na ekranie powitalnym.
7 odpowiedzi

4
Nie ma nic o nazwie UIStatusBarStyleLightContentw 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 :)
user1949873

45
Dla leniwych ludzi takich jak ja, skopiuj i odejdź: <key>UIStatusBarStyle</key> <string>UIStatusBarStyleLightContent</string> <key>UIViewControllerBasedStatusBarAppearance</key> <false/>
Adam Waite

241

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


10
Przestarzałe w iOS 9.: - /
sudo instaluje

112

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.

Wpisz opis zdjęcia tutaj


3
W urządzeniu żadna z powyższych odpowiedzi nie działała dla mnie, tylko ta. Myślę, że mówi wszystko o nowym systemie, że musisz ustawić NABRA_ nawigacji na CZARNY, aby tekst statusu_BIAŁY był BIAŁY.
MrTJ

2
Po zmaganiu się z wieloma rzeczami, to właśnie skończyło się na pracy. Styl został ustawiony na domyślny. Zmieniłem to i usunąłem wszystkie inne hacki paska stanu i działa.
Gujamin

1
Jeśli nie chcesz ustawiać wszystkich pasków nawigacyjnych w IB, możesz również ustawić jego wygląd proxy. [[Wygląd UINavigationBar] setBarStyle: UIBarStyleBlack];
Steve Moser

3
Nie działa dla mnie w Storyboard iOS7. Wygląda na to, że może to być efekt uboczny lub coś innego?
Chris

Chciałbym potwierdzić, że wszystkie powyższe odpowiedzi nie były dla mnie skuteczne. Po obrazie tekst paska stanu wygląda na biały. Ale powtarzam jeszcze raz, powyższe ODPOWIEDZI z Xcode 6.2 i iOS 8.2 nie działają.
Markus

98

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];

To rozwiązanie działało dla mnie, podczas gdy powyższe nie.
John Contarino

Niesamowite, ale ten UIViewControllerBasedStatusBarAppearance konwertuje na to samo: Automatycznie wyświetlaj pasek stanu na kontrolerze :)
Abhishek Thapliyal

63

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: wprowadź opis zdjęcia tutaj

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:

wprowadź opis zdjęcia tutaj

Otóż ​​to.


1
Podobało mi się twoje podejście! W moim przypadku próbowałem wymyślić, aby styl paska stanu był tak jasny, że jest on pełny ekran (bez paska nawigacji). Potem zdałem sobie sprawę, że wszystkie inne ekrany powinny pasować do tego samego stylu światła. Tak więc dobrym rozwiązaniem jest ustalenie całości. Dzięki! (:
Igor de Lorenzi

Jeśli nie musisz tego zmieniać, gdy aplikacja jest uruchomiona. To najlepsze podejście.
Michael

To podejście zdecydowanie działa, ale wprowadza dziwny problem na iPadzie. W przypadku, gdy aplikacja obsługuje deeplink, a po uruchomieniu aplikacji przez deeplink, łącze wsteczne pojawiające się na pasku stanu znika.
Chitranshu Asthana,

Najlepszy i najprostszy.
Amit Kumar,

najlepsze rozwiązanie dla mnie: D
Gold Chicken

48

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];}

4
Uwielbiam tę odpowiedź, po raz pierwszy używam param „aplikacji”))
MUH Mobile Inc.,

Zapis kropkowy i byłby idealny;)
Rivera

43

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):

  1. Ustaw the UIViewControllerBasedStatusBarAppearancena NOw Info.plist.

  2. W ViewDidLoadmetodzie lub w dowolnym miejscu, gdzie chcesz zmienić styl paska stanu: [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];


1
Domyślne wartości UIViewControllerBasedStatusBarAppearance to TAK. „Aplikacje domyślnie używają nowego systemu zarządzania opartego na kontrolerze paska stanu. Aby zrezygnować, dodaj wartość NIE dla klucza UIViewControllerBasedStatusBarAppearance do swojej Info.plist.” [ bgr.com/2013/09/10/ios-7-gm-change-log-release-notes/]
Zsolt

1
Ya !! Po ustawieniu UIViewControllerBasedStatusBarAppearance na NIE, pasek stanu ukrywa się w widokach.
CashLee 李秉骏

czy powinien być stosowany do wszystkich viewdidload?
Arnlee Vizcayno

Możesz go dodać tylko w metodzie appDelegates didFinishLoading. Lub w pierwszych widokach metoda viewDidLoad, jeśli nie chcesz jej zmieniać.
Deniss Fedotovs

1
fantastycznie, ten wykonał robotę. proste i świetne kodowanie.
Felipe

32

W przypadku, gdy Twój UIViewController znajduje się w UINavigationController, będziesz musiał ustawić BarStyle:

-[UINavigationBar setBarStyle:UIBarStyleBlack]

Oryginalna odpowiedź jest tutaj

https://devforums.apple.com/message/844264#844264


Nie, dzięki temu kolor paska nawigacji jest taki sam, jak kolor tekstu paska stanu. To ukrywa problem, a nie rozwiązuje go!
wpearse,

2
W iOS7 pasek stanu będzie naśladował pasek UINavigation, jeśli widok zawiera UINavigationController, więc w wielu przypadkach jest to poprawna odpowiedź.
jonstaff

29

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.


To było jedyne rozwiązanie, które działało dla mnie w aplikacji bez scenorysów i Xib. Powinno być pomocne również dla użytkowników spoza IB.
Johnny Sparks

2
Było to dla mnie idealne, gdy musiałem ustawić styl inaczej w każdym kontrolerze widoku
Ben

Jeśli chcesz zachować „Wyświetl wygląd paska stanu opartego na kontrolerze” ustawioną na „tak”, to jest to właściwy sposób. Dzięki!
cloudsurfin

28

Używam Xcode 6 beta 5 w projekcie Swift dla aplikacji na iOS 7.

Oto co zrobiłem i działa:

info.plist:

Wpisz opis zdjęcia tutaj


2
Dzięki, wygląda na to, że tylko twoje rozwiązanie współpracuje z najnowszą wersją IOS7
Dekel Maman,

To rozwiązanie wyświetla pasek stanu podczas ładowania aplikacji na ekranie uruchamiania.
Juan Boero,

Rozwiązałem moje problemy w xCode 7.1. Ostatnia wersja. Apple zapomniało kilku kluczowych elementów, aby coś zadziałało. Jeszcze raz.
Michael

22

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.


20

Po prostu w Appdelegate

[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];

5
Jedyna jedyna odpowiedź, która faktycznie dla mnie zadziałała.
Wim Haanstra

6
Ale w tym celu musimy zrezygnować Wyświetl wygląd paska stanu oparty na kontrolerze .
iamyogish

Przestarzałe w iOS9
Dimitris,

20

Cóż, to naprawdę działa dla mnie jak bułka z masłem.

Przejdź do swojej aplikacji info.plist.

  1. Ustaw View controller-based status bar appearancenaNO
  2. Ustaw Status bar stylenaUIStatusBarStyleLightContent

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.


1
myślę, że to jest poprawna odpowiedź (część listy) ... dlaczego miałbym dodawać kod statyczny przy didfinishlaunchingwithoptions ... Jeśli potrzebujesz tego samego koloru dla całej aplikacji, to jest właściwy sposób
user2387149

20
  1. Idź do Project-> Target,

  2. Następnie ustaw Status Bar Stylena Light. Sprawia, że ​​pasek stanu jest biały z ekranu startowego. Ustawienie projektu

  3. Następnie ustaw View controller-based status bar appearance równą NOin Info.plist.


2
Druga część, gdzie można ustawić rzeczywistą View controller-based status bar appearance equalTO NObył kawałek mi brakuje. Dzięki
Will

18

Zmiana informacji PLIST 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
 }

1
To po prostu niesamowity stary :) Dzięki.
Naresh Reddy M

zrobienie tego zostało przestarzałe w iOS 9 powinno to zrobić w przypadku zastąpienia kontrolera rootview var preferStatusBarStyle: UIStatusBarStyle {return .lightContent}
James Rochabrun

17

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łania setNeedsStatusBarAppearanceUpdate.

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/


Dzięki. Mój problem polegał na tym, że nie widziałem, aby typ „Wyświetl wygląd paska stanu opartego na kontrolerze” był ustawiony na Ciąg. Ręczne edytowanie pliku .plist i wprowadzenie wartości logicznej rozwiązało problem.
Chris Prince

12

Nie musisz nic więcej robić, po prostu napisz ten kod w swoim viewController i uzyskaj biały pasek stanu

- (UIStatusBarStyle)preferredStatusBarStyle{return UIStatusBarStyleLightContent;}

Umieść to pod ViewController.m po wdrożeniu. Jest najłatwiejszy i działa świetnie! Dziękuję Mohit!
Phil Mulkins,

12

Odpowiedź zaktualizowana dla dla Xcode GM Seed:

  1. W Info.plistput View controller-based status bar appearancejakoNO

  2. W projekcie ustaw:

    Wpisz opis zdjęcia tutaj

  3. W ViewDidLoad:

    [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];


To zmieniło pasek kart, a nie pasek stanu dla mnie.
Keith,

11

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 Ustawienia 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 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

wprowadź opis zdjęcia tutaj

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:

Ustawianie stylu paska stanu w kodzie


proszę wyjaśnij swoją sprawę, a ja postaram się pomóc
Fawkes,

1
Musiałem dodać StatusBarIsIntialHidden = NO do listy, a także ViewControllerBasedApplicationStatusBarAppearnce = NO do listy. Potem działa to przy użyciu części pierwszej
Michael

Czy masz ekran powitalny, który ma taki sam „obraz” jak pierwszy kontroler widoku ładowania? Ponadto w sekcji „Informacje” celu możesz spróbować ustawić „Ukryj pasek stanu” na wartość false i uniknąć zajmowania się .plist. Flaga „StatusBarIsIntialHidden”
Fawkes

Ja nie. Używa wygenerowanego domyślnego xib.
Michael

Znalazłem ten problem podczas tworzenia nowego projektu w xCode 7.1 i dlatego pomyślałem, że to takie dziwne
Michael

10

Po prostu dzwonię

[[UINavigationBar appearance] setBarStyle:UIBarStyleBlack];

w

-(BOOL)application:(UIApplication *)application 
           didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
}

metoda moich AppDelegateprac jest dla mnie świetna w iOS7.


Wow, dużo bzdur tutaj, ale ta odpowiedź zadziałała dla mnie. Korzystam z Xcode 6 i iOS 8 SDK
Ethan Parker

1
Doskonale, działa dla mnie w iOS 9 zView controller-based status bar appearance = NO
dstudeba

9

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 aplikacji Info.plisti nadaj mu wartość YES.

Zdecydowanie polecam przejrzenie dokumentu, do którego ponownie można uzyskać dostęp za pomocą identyfikatora programisty Apple.


3
Próbowałem już [application setStatusBarStyle: UIStatusBarStyleLightContent]; ale tak naprawdę nic się nie zmienia, kolor tekstu jest nadal czarny
Oleksandr Veremchuk

Chciałbym być bardziej pomocny, ale, jak mówię, nie znam wystarczająco dużo procesu tworzenia systemu iOS, aby wiedzieć, co zasugerować. Przepraszam!
Aaron Miller

1) ustaw UIViewControllerBasedStatusBarAppearance na TAK na liście 2) w viewDidLoad wykonaj [self setNeedsStatusBarAppearanceUpdate]; 3) dodaj następującą metodę :-( UIStatusBarStyle) preferStatusBarStyle {return UIStatusBarStyleLightContent; }
Peter B. Kramer

9

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:

  1. Ustaw UIViewControllerBasedStatusBarAppearancesię YESw .plistpliku, jeśli trzeba ustawić status bar w stylu tylko na poziomie UIViewController.
  2. W funkcji dodawania viewDidLoad - setNeedsStatusBarAppearanceUpdate

  3. 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. wprowadź opis zdjęcia tutaj


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:

wprowadź opis zdjęcia tutaj


8

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:

  • Zobacz wygląd paska stanu kontrolera> NIE
  • Styl paska stanu> UIStatusBarStyleLightContent (prosty ciąg)

Mam nadzieję, że to pomoże.

edytować

Dla każdego kontrolera widoku zmieniam właściwość Symulowane metryki „paska stanu” w serii ujęć z „wywnioskowanej” na „lekką treść”


8

Jeśli chcesz uzyskać ten sam wynik w Swift, możesz użyć tego kodu w pliku AppDelegate.swift:

UINavigationBar.appearance().barStyle = .BlackTranslucent

A tekst paska stanu będzie biały :-)!


8

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];

Pasek nawigacyjny! = Pasek stanu.
Michael Peterson,

... Spróbowałeś !? (I tak, na pasku stanu)
eirik

7

W Plist dodaj to:

  • Styl paska stanu: UIStatusBarStyleLightContent
  • Wyświetl wygląd paska stanu kontrolera: NO

7

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.


2
zwycięzca zwycięzca obiad z kurczakiem
tommybananas

7

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!


Ta metoda jest nieaktualna w systemie iOS 9
Trung Bui
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.