So ändern Sie die Textfarbe der Statusleiste in iOS

990

Meine Anwendung hat einen dunklen Hintergrund, aber in iOS 7 wurde die Statusleiste transparent. Ich kann dort also nichts sehen, nur die grüne Batterieanzeige in der Ecke. Wie kann ich die Textfarbe der Statusleiste wie auf dem Startbildschirm in Weiß ändern?

Oleksandr Veremchuk
quelle
9
Dieser Link hat interessante Informationen zu diesem Thema: doubleencore.com/2013/09/…
Adriano Lucas

Antworten:

1380
  1. Setzen Sie das UIViewControllerBasedStatusBarAppearanceauf YESin der .plist-Datei.

  2. In der viewDidLoaddo a[self setNeedsStatusBarAppearanceUpdate];

  3. Fügen Sie die folgende Methode hinzu:

    - (UIStatusBarStyle)preferredStatusBarStyle
    { 
        return UIStatusBarStyleLightContent; 
    }

Hinweis : Dies funktioniert nicht für Controller im Inneren UINavigationController, siehe Tysons Kommentar unten :)

Swift 3 - Dies funktioniert im Inneren der Controller UINavigationController. Fügen Sie diesen Code in Ihren Controller ein.

// Preferred status bar style lightContent to use on dark background.
// Swift 3
override var preferredStatusBarStyle: UIStatusBarStyle {
    return .lightContent
}

Swift 5 und SwiftUI

Erstellen Sie für SwiftUI eine neue Swift-Datei mit dem Namen HostingController.swift

import Foundation
import UIKit
import SwiftUI

class HostingController: UIHostingController<ContentView> {
    override var preferredStatusBarStyle: UIStatusBarStyle {
        return .lightContent
    }
}

Ändern Sie dann die folgenden Codezeilen in der SceneDelegate.swift

window.rootViewController = UIHostingController(rootView: ContentView())

zu

window.rootViewController = HostingController(rootView: ContentView())
Peter B. Kramer
quelle
78
Ich brauchte Schritt 2 nicht.
Jason Moore
37
Scheint unter iOS 7 Beta 5 mit Xcode5-DP5 nicht zu funktionieren. PreferredStatusBarStyle scheint nicht aufgerufen zu werden.
Wilsontgh
18
UIViewControllerBasedStatusBarAppearance wurde geändert, um die Darstellung der Controller-basierten Statusleiste in Xcode 5 GM-Seed
anzuzeigen
42
Erhielt die Antwort für Xcode GM Seed: 1. Setzen Sie in Info.plist das Erscheinungsbild der View Controller-basierten Statusleiste auf NO. 2. Geben Sie in appDelegate in der appDidFinishLaunching-Methode [[UIView Erscheinungsbild] setTintColor: [UIColor whiteColor]] ein.
Parilogic
101
UINavigationController ist ein Sonderfall, der oben genannte funktioniert nicht. Ich habe nur Stunden damit verbracht, meinen Kopf darüber zu kratzen. Siehe hier für die Lösung: stackoverflow.com/a/19513714/505457
Tyson
848

Alternativ können Sie das Erscheinungsbild der View-Controller-basierten Statusleiste deaktivieren:

  1. Stellen Sie View controller-based status bar appearancezu NOIhrem Info.plist.
  2. Anruf [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];

Hinweis: Diese Methode ist in iOS9 veraltet. Verwenden preferredStatusBarStyleSie stattdessen auf dem UIViewController. (siehe Apple Developer Library )

wilsontgh
quelle
16
Dies ist eine viel bessere und einfachere Route.
Mick Byrne
227
Keine Notwendigkeit zu codieren. Dies kann von der Liste aus erfolgen: (1) Setzen Sie "Aussehen der Controller-basierten Statusleiste anzeigen" auf NEIN und (2) Setzen Sie "Statusleistenstil" auf "Undurchsichtiger schwarzer Stil". (Rohwerte sind UIViewControllerBasedStatusBarAppearance -> NO und UIStatusBarStyle -> UIStatusBarStyleBlackOpaque)
SwiftArchitect
3
Beachten Sie, dass Sie müssen den entsprechenden info.plist Wert auf NO für diese Arbeit eingestellt.
Abhi Beckert
9
@ Gothicdev: schöner Fang. Würde Ihre Antwort akzeptieren, da es die sauberste ist. Leichte Option für Bar Style könnte sein: UIStatusBarStyleLightContent
benka
9
Diese Methode ist in iOS 9 veraltet.
lostAtSeaJoshua
439

Sie können dies tun, ohne eine Codezeile zu schreiben!
Gehen Sie wie folgt vor, um den Text der Statusleiste in der gesamten App weiß zu machen

Auf Ihrer Projekt-Plist- Datei:

  • Stil der Statusleiste: Transparent black style (alpha of 0.5)
  • Anzeigen der Controller-basierten Statusleiste: NO
  • Die Statusleiste ist zunächst ausgeblendet: NO
Lucas
quelle
12
Ich weiß nicht, ob sich etwas geändert hat, aber der UIStatusBarStyleLightContent-Wert wird von XCode nicht erkannt und in keiner Dokumentation gefunden ... Obwohl er zu funktionieren scheint.
Nathan H
5
Dieser hat es auch auf dem Begrüßungsbildschirm geändert, während es nicht auf dem Navigator eingestellt wäre ... Kudos!
viniciusnz
3
Auf jeden Fall der einfachste Weg, dies zu erledigen und wie erwähnt auch auf dem Begrüßungsbildschirm.
7 Wunder
4
Es gibt jedoch nichts, was UIStatusBarStyleLightContentim plist infoJEDOCH aufgerufen Transparent Blackwird, was den gleichen Trick macht :) Außerdem müssen Sie hinzufügen, View controller-based status bar appearanceda es ursprünglich nicht vorhanden ist und es alles ist, was Sie brauchen, um es zum
Laufen
45
Für faule Leute wie mich, kopieren und vorbei: <key>UIStatusBarStyle</key> <string>UIStatusBarStyleLightContent</string> <key>UIViewControllerBasedStatusBarAppearance</key> <false/>
Adam Waite
241

Hinweis: Die meisten Antworten stimmen nicht für iOS 7/8

Setzen Sie in der Info.plist 'Aussehen der Controller-basierten Statusleiste anzeigen' auf NEIN

In AppDelegate hinzufügen

[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];

zu

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

Diese Lösung funktioniert für iOS 7/8

Pradeep Mahdevu
quelle
10
Veraltet in iOS 9 .: - /
sudo make install
112

Für mich ist nichts passiert, wenn ich alle Dinge in den anderen Antworten (und aus anderen Quellen / Dokumentationen) verwendet habe. Was geholfen hat, war, den Navigationsleistenstil in der XIB auf "Schwarz" zu setzen. Dadurch wurde der Text ohne Code in Weiß geändert.

Geben Sie hier die Bildbeschreibung ein

haraldmartin
quelle
3
Auf dem Gerät hat keine der oben genannten Antworten für mich funktioniert, außer dieser. Ich denke, es sagt alles über das neue System aus, dass Sie die Navigationsleiste auf SCHWARZ setzen müssen, um den Statusleisten- Text WEISS zu erhalten.
MrTJ
2
Nachdem wir uns durch viele Dinge gekämpft hatten, funktionierte dies schließlich. Der Stil wurde auf Standard gesetzt. Dies wurde geändert und alle anderen Statusleisten-Hacks entfernt, und es funktioniert.
Gujamin
1
Wenn Sie nicht alle Navigationsleisten in IB festlegen möchten, können Sie auch den Darstellungs-Proxy festlegen. [[UINavigationBar-Darstellung] setBarStyle: UIBarStyleBlack];
Steve Moser
3
Funktioniert bei iOS7 Storyboard nicht. Sieht so aus, als wäre dies ein Nebeneffekt von etwas anderem?
Chris
Ich möchte bestätigen, dass alle oben genannten Antworten auch bei mir nicht funktioniert haben. Nach dem Bild sieht der Statusleisten-Text weiß aus. Aber ich wiederhole noch einmal, die obigen ANTWORTEN mit Xcode 6.2 und iOS 8.2 funktionieren nicht.
Markus
98

Nichts davon hat bei mir funktioniert, also hier ist eine funktionierende Lösung ...

In Info.plist, fügen Sie eine Zeile:

UIViewControllerBasedStatusBarAppearanceund stellen Sie den Wert ein NO.

Fügen Sie dann in AppDelegate in didFinishLaunchingWithOptionsdie folgenden Zeilen hinzu:

[application setStatusBarHidden:NO];
[application setStatusBarStyle:UIStatusBarStyleLightContent];
stepik21
quelle
Diese Lösung hat bei mir funktioniert, die oben genannten jedoch nicht.
John Contarino
Genial, aber diese UIViewControllerBasedStatusBarAppearance wird in dieselbe konvertiert: Anzeige der Controller-basierten Statusleiste automatisch
anzeigen
63

Sie müssen dafür keinen Code ausführen

Sie müssen den Schlüssel "View Controller-based Status Bar Erscheinungsbild" in info.plist wie folgt hinzufügen: Geben Sie hier die Bildbeschreibung ein

& setze seinen Werttyp auf Boolean & Wert auf NO. Klicken Sie dann auf Projekteinstellungen, dann auf Registerkarte Allgemein und setzen Sie unter Bereitstellungsinformationen den bevorzugten Statusleistenstil auf .Light wie folgt:

Geben Sie hier die Bildbeschreibung ein

Das ist es.

Ajinkya Patil
quelle
1
Ihr Ansatz hat mir gefallen! In meinem Fall habe ich versucht herauszufinden, wie der Statusleistenstil nur im Vollbildmodus (ohne Navigationsleiste) hell wird. Dann wurde mir klar, dass alle anderen Bildschirme den gleichen Lichtstil haben sollten. Eine gute Lösung ist es also, sich auf das Ganze einzustellen. Vielen Dank! (:
Igor de Lorenzi
Wenn Sie dies nicht ändern müssen, während Ihre App ausgeführt wird. Dies ist der beste Ansatz.
Michael
Dieser Ansatz funktioniert definitiv, führt jedoch zu einem seltsamen Problem auf dem iPad. Falls Ihre Anwendung Deeplinks unterstützt und wenn Sie die Anwendung über Deeplink starten, verschwindet der in der Statusleiste angezeigte Backlink.
Chitranshu Asthana
Beste und einfachste.
Amit Kumar
Die beste Lösung für mich: D
Gold Chicken
48

Nur zwei Schritte wie folgt:

Schritt 1:

Auf der Registerkarte "Info" unter " project targetZeile hinzufügen":

UIViewControllerBasedStatusBarAppearanceWert einstellen NO.

Schritt 2:

Im Projekt AppDelegate.m:

- (BOOL)application:(UIApplication *)application 
        didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{[application setStatusBarStyle:UIStatusBarStyleLightContent];}
folse
quelle
4
Ich liebe diese Antwort, weil ich zum ersten Mal den Parameter "application" verwende.)
MUH Mobile Inc.
Punktnotation und es wäre perfekt;)
Rivera
43

Dies funktioniert in Golden Master iOS 7 und Xcode 5 GM Seed und iOS7 SDK, die am 18. September 2013 veröffentlicht wurden (zumindest mit verstecktem Navigationscontroller):

  1. Setzen Sie the UIViewControllerBasedStatusBarAppearanceauf NOin der Info.plist.

  2. ViewDidLoadWo möchten Sie in der Methode oder irgendwo den Stil der Statusleiste ändern: [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];

Deniss Fedotovs
quelle
1
Die Standardwerte für UIViewControllerBasedStatusBarAppearance scheinen YES zu sein. "Apps verwenden standardmäßig das neue View Controller-basierte Statusleisten-Verwaltungssystem. Um dies zu deaktivieren, fügen Sie Ihrer Info.plist den Wert NO für den UIViewControllerBasedStatusBarAppearance-Schlüssel hinzu." [ bgr.com/2013/09/10/ios-7-gm-change-log-release-notes/]
Zsolt
1
Ja !! Nachdem Sie die UIViewControllerBasedStatusBarAppearance auf NO gesetzt haben, wird die Statusleiste in den Ansichten ausgeblendet.
CashLee 22
sollte es auf alle viewdidload angewendet werden?
Arnlee Vizcayno
Sie können es einfach in der didDinegates didFinishLoading-Methode von appDelegates hinzufügen. Oder in den ersten Ansichten die viewDidLoad-Methode, wenn Sie nicht möchten, dass sie sich ändert.
Deniss Fedotovs
1
fantastisch, dieser hat den Job gemacht. einfache und gute Codierung.
Felipe
32

Wenn sich Ihr UIViewController in einem UINavigationController befindet, müssen Sie den BarStyle festlegen:

-[UINavigationBar setBarStyle:UIBarStyleBlack]

Die ursprüngliche Antwort ist hier

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

Mohit Padalia
quelle
Nein, dadurch wird die Farbe der Navigationsleiste einfach mit der Textfarbe der Statusleiste identisch. Dies verbirgt das Problem, behebt es nicht!
wpearse
2
In iOS7 ahmt die Statusleiste die UINavigationBar nach, wenn die Ansicht einen UINavigationController enthält. In vielen Fällen ist dies die richtige Antwort.
Jonstaff
29

Wenn Sie einen eingebetteten Navigationscontroller über Interface Builder erstellt haben , müssen Sie in einer Klasse, die Ihren Navigationscontroller verwaltet, Folgendes festlegen:

-(UIStatusBarStyle)preferredStatusBarStyle{ 
    return UIStatusBarStyleLightContent; 
} 

Das sollte alles sein, was Sie brauchen.

matt bernardo
quelle
Dies war die einzige Lösung, die für mich in einer App ohne Storyboard und ohne Xib funktioniert hat. Sollte auch für Nicht-IB-Benutzer hilfreich sein.
Johnny Sparks
2
Dies war perfekt für mich, als ich den Stil in jedem View Controller anders einstellen musste
Ben
Wenn Sie das Erscheinungsbild "Controller-basierte Statusleiste anzeigen" auf "Ja" setzen möchten, ist dies der richtige Weg. Vielen Dank!
Cloudsurfin
28

Ich verwende Xcode 6 Beta 5 in einem Swift- Projekt für eine iOS 7-App.

Folgendes habe ich getan und es funktioniert:

info.plist:

Geben Sie hier die Bildbeschreibung ein

Fancoolo
quelle
2
Vielen Dank, es sieht so aus, als ob nur Ihre Lösung mit der neuesten Version von IOS7
Dekel Maman
Diese Lösung zeigt die Statusleiste beim Laden der App auf dem Startbildschirm an.
Juan Boero
Meine Probleme in xCode 7.1 wurden behoben. Letzte Version. Apple hat ein paar wichtige Teile vergessen, damit etwas funktioniert. Nochmal.
Michael
22

Fügen Sie in AppDelegate.m Folgendes hinzu.

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

[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];

} 

Setzen Sie in der Plist-Datei 'Erscheinungsbild der Controller-basierten Statusleiste anzeigen' auf NEIN.

neo D1
quelle
20

Einfach in Appdelegate

[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
Vivek Sehrawat
quelle
5
Die einzige Antwort, die tatsächlich für mich funktioniert hat.
Wim Haanstra
6
Dafür müssen wir jedoch das Erscheinungsbild der View Controller-basierten Statusleiste deaktivieren .
iamyogish
Veraltet in iOS9
Dimitris
20

Nun, das funktioniert wirklich wie ein Kinderspiel für mich.

Gehen Sie zu Ihrer App info.plist.

  1. Set View controller-based status bar appearancezuNO
  2. Set Status bar stylezuUIStatusBarStyleLightContent

Gehen Sie dann zum Delegaten Ihrer App und fügen Sie den folgenden Code ein, in dem Sie den RootViewController Ihres Windows festlegen.

#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. Es funktioniert für mich.

Shahid Iqbal
quelle
1
Ich denke, dies ist die richtige Antwort (der Teil der Liste) ... warum sollte ich statischen Code zum Starten von Didfinishlaunch mit Optionen hinzufügen ... Wenn Sie dieselbe Farbe für die gesamte App benötigen, ist dies der richtige Weg
user2387149
20
  1. Gehe zu Project-> Target,

  2. Dann setzen Sie Status Bar Styleauf Light. Die Statusleiste wird auf dem Startbildschirm weiß. Projekteinstellung

  3. Dann setzen Sie View controller-based status bar appearancegleich NOin Info.plist.

Wanbok Choi
quelle
2
Der zweite Teil, auf den Sie den tatsächlichen Wert eingestellt haben View controller-based status bar appearance equal, NOwar das Stück, das mir fehlte. Vielen Dank
Will
18

Änderung in info PLIST In Swift 3 ist nur mit 2 Schritten sehr einfach. Gehen Sie zu Ihrer info.plist und ändern Sie den Schlüssel View controller-based status bar appearancein "NO". Fügen Sie dann im Appdelegate diese Zeile in der Methode didfinishlaunchingwithoptions hinzu

  func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
        // Override point for customization after application launch.
        UIApplication.shared.statusBarStyle = .lightContent
        return true
    }

Dies ist in iOS9 veraltet. Jetzt sollten Sie diese Eigenschaft im rootviewcontroller überschreiben

Dies ist in iOS 9 veraltet. Sollte dies auf dem rootviewcontroller tun

override var preferredStatusBarStyle: UIStatusBarStyle {
        return .lightContent
 }
James Rochabrun
quelle
1
Es ist einfach großartig, Bruder :) Danke.
Naresh Reddy M
Dadurch wurde in iOS veraltet 9 sollten dies tun , auf der RootViewController Überschreibung var preferredStatusBarStyle: UIStatusBarStyle {return .lightContent}
James Rochabrun
17

Mit iOS 7 können einzelne Ansichts-Controller das Erscheinungsbild der Statusleiste bestimmen, wie in der Apple-Entwicklerdokumentation beschrieben:

Mit iOS 7 können View Controller den Stil der Statusleiste anpassen, während die App ausgeführt wird. Eine gute Möglichkeit, den Statusleistenstil dynamisch zu ändern, besteht darin, das preferredStatusBarStyleErscheinungsbild und den Aufruf der Statusleiste zu implementieren und innerhalb eines Animationsblocks zu aktualisieren setNeedsStatusBarAppearanceUpdate.

Das globale Festlegen des Erscheinungsbilds der Statusleiste erfolgt in zwei Schritten.

Zunächst müssen Sie iOS mitteilen, dass Sie das Erscheinungsbild der Statusleiste nicht für jede Ansicht einzeln festlegen möchten.

Dann müssen Sie die Verantwortung übernehmen und den neuen globalen Statusleistenstil festlegen.

Um die Statusleistensteuerung von Ansicht zu Ansicht zu deaktivieren, müssen Sie die View controller-based status bar appearanceEigenschaft in festlegen Info.plist.

Öffnen Sie den Projektnavigator, wählen Sie das Projekt für Ihre iOS-App aus und wählen Sie dann die Registerkarte Info.

Bewegen Sie den Mauszeiger über eine Zeile und klicken Sie dann auf das Pluszeichen, um eine neue Eigenschaft zu Ihrer hinzuzufügen .plist.

Geben Sie View controller-based status bar appearancein das Feld Schlüssel ein und stellen Sie sicher, dass das Feld Typ auf eingestellt ist Boolean. Geben Sie abschließend NOdas Feld Wert ein.

Um einen globalen Stil für die Statusleiste festzulegen, fügen Sie auf der Registerkarte "Info" eine weitere Eigenschaft mit dem Schlüssel Status bar style, einem Typ von Stringund einem Wert von hinzu Opaque black style.

Hier ist ein Blog-Beitrag mit etwas mehr Details und einem Beispielcode:

http://codebleep.com/setting-the-status-bar-text-color-in-ios-7/

Josh Earl
quelle
Vielen Dank. Mein Problem war, dass ich nicht gesehen habe, dass der Typ "Erscheinungsbild der Controller-basierten Statusleiste anzeigen" auf "String" gesetzt war. Durch Bearbeiten der .plist-Datei "von Hand" und Eingeben des Booleschen Werts wurden die Dinge geklärt.
Chris Prince
12

Sie müssen nichts extra tun, schreiben Sie einfach diesen Code in Ihren viewController und erhalten Sie die Statusleistenfarbe Weiß

- (UIStatusBarStyle)preferredStatusBarStyle{return UIStatusBarStyleLightContent;}
Mohit Tomar
quelle
Fügen Sie dies nach der Implementierung unter ViewController.m ein. Es ist das einfachste und funktioniert super! Danke Mohit!
Phil Mulkins
12

Antwort aktualisiert für für Xcode GM Seed:

  1. In Info.plistsetzen View controller-based status bar appearancealsNO

  2. Stellen Sie im Projekt Folgendes ein:

    Geben Sie hier die Bildbeschreibung ein

  3. In ViewDidLoad:

    [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];

parilogisch
quelle
Das hat die Registerkartenleiste geändert, nicht die Statusleiste für mich.
Keith
11

Ich denke, alle Antworten weisen nicht wirklich auf das Problem hin, da alle in bestimmten Szenarien funktionieren. Wenn Sie jedoch alle Fälle abdecken müssen, befolgen Sie die folgenden Punkte:

Je nachdem, wo Sie den Lichtstil der Statusleiste benötigen, sollten Sie immer diese 3 Punkte berücksichtigen:

1) Wenn Sie die Statusleiste auf dem Startbildschirm oder an anderen Stellen benötigen, an denen Sie sie nicht steuern können (nicht in Ansichtssteuerungen, sondern in einigen systemgesteuerten Elementen / Momenten wie dem Startbildschirm), gehen Sie zu Ihren Projekteinstellungen Projekt Einstellungen

2) Wenn Sie einen Controller in einem Navigationscontroller haben, können Sie ihn im Interface Builder wie folgt ändern:

a) Wählen Sie die Navigationsleiste Ihres Navigationscontrollers Wählen Sie die Navigationsleiste Ihres Navigationscontrollers

b) Stellen Sie dann den Stil der Navigationsleiste auf "Schwarz" ein, da dies bedeutet, dass sich unter Ihrer Statusleiste ein "Schwarz" -> dunkler Hintergrund befindet, sodass die Statusleiste auf Weiß gesetzt wird

Geben Sie hier die Bildbeschreibung ein

Oder machen Sie es im Code wie folgt

navigationController?.navigationBar.barStyle = UIBarStyle.Black

3) Wenn Sie nur den Controller haben, der einen eigenen Statusleistenstil haben muss und nicht als UINavigationController in eine Containerstruktur eingebettet ist

Legen Sie den Statusleistenstil im Code für den Controller fest:

Festlegen des Statusleistenstils im Code

Fawkes
quelle
Bitte erklären Sie Ihren Fall und ich werde versuchen zu helfen
Fawkes
1
Ich musste StatusBarIsIntiallyHidden = NO zur Liste sowie ViewControllerBasedApplicationStatusBarAppearnce = NO zur Liste hinzufügen. Dann funktioniert dies mit Teil eins
Michael
Hatten Sie einen Begrüßungsbildschirm mit demselben "Bild" wie der erste Controller für die Ladeansicht? Außerdem können Sie im Abschnitt "Info" Ihres Ziels versuchen, die "Statusleiste ausblenden" auf "falsch" zu setzen und den Umgang mit Ihrer .plist zu vermeiden. "StatusBarIsIntiallyHidden" -Flag
Fawkes
Ich nicht. Es wird die generierte Standard-XIB verwendet.
Michael
Ich habe dieses Problem tatsächlich beim Erstellen eines neuen Projekts in xCode 7.1 gefunden, weshalb ich es für so seltsam hielt
Michael
10

Einfach anrufen

[[UINavigationBar appearance] setBarStyle:UIBarStyleBlack];

in dem

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

Methode meiner AppDelegatefunktioniert gut für mich in iOS7.

Cagdas Altinkaya
quelle
Wow, viel Mist hier, aber diese Antwort hat bei mir funktioniert. Ich benutze Xcode 6 und iOS 8 SDK
Ethan Parker
1
Ausgezeichnet, funktioniert für mich in iOS 9 mitView controller-based status bar appearance = NO
dstudeba
9

Dies ist im iOS 7 UI Transition Guide dokumentiert , auf das Sie eine Apple-Entwickler-ID benötigen, um direkt darauf zugreifen zu können. Der relevante Auszug:

Da die Statusleiste transparent ist, wird die Ansicht dahinter durchsichtig angezeigt. [...] Verwenden Sie eine UIStatusBarStyleKonstante, um anzugeben, ob der Inhalt der Statusleiste dunkel oder hell sein soll:

UIStatusBarStyleDefaultZeigt dunklen Inhalt an. [...]

UIStatusBarStyleLightContentZeigt Lichtinhalt an. Verwenden Sie diese Option, wenn sich dunkler Inhalt hinter der Statusleiste befindet.

Möglicherweise auch von Interesse:

In iOS 7 können Sie den Stil der Statusleiste von einem einzelnen Vew-Controller aus steuern und ändern, während die App ausgeführt wird. Um dieses Verhalten zu aktivieren, fügen Sie den UIViewControllerBasedStatusBarAppearanceSchlüssel zur Info.plistDatei einer App hinzu und geben Sie ihr den Wert YES.

Ich würde auf jeden Fall empfehlen, das Dokument durchzusehen, auf das Sie wiederum mit Ihrer Apple-Entwickler-ID zugreifen können.

Aaron Miller
quelle
3
Ich habe bereits versucht [application setStatusBarStyle: UIStatusBarStyleLightContent]; aber eigentlich ändert sich nichts, die
Textfarbe
Ich würde gerne weiterhelfen, aber wie gesagt, ich bin mit dem iOS-Entwicklungsprozess nicht vertraut genug, um zu wissen, was ich vorschlagen soll. Es tut uns leid!
Aaron Miller
1) Setzen Sie die UIViewControllerBasedStatusBarAppearance in der Liste auf YES. 2) Führen Sie in viewDidLoad ein [self setNeedsStatusBarAppearanceUpdate] aus. 3) Fügen Sie die folgende Methode hinzu :-( UIStatusBarStyle) PreferredStatusBarStyle {return UIStatusBarStyleLightContent; }
Peter B. Kramer
9

Hier finden Sie Apple-Richtlinien / Anweisungen zum Ändern der Statusleiste. In der Statusleiste sind nur Dunkel und Hell (während und Schwarz) zulässig.

Hier ist - So ändern Sie den Stil der Statusleiste:

Wenn Sie Set - Statusleiste Stil wollen, Anwendungsebene dann eingestellt , UIViewControllerBasedStatusBarAppearanceum NOin Ihrer `.plist‘ Datei.

Wenn Sie den Statusleistenstil auf View Controller-Ebene festlegen möchten, gehen Sie folgendermaßen vor:

  1. Setzen Sie das UIViewControllerBasedStatusBarAppearancein YESin der .plistDatei, wenn Sie den Statusleistenstil nur auf UIViewController-Ebene festlegen müssen.
  2. In der viewDidLoad Add-Funktion - setNeedsStatusBarAppearanceUpdate

  3. Überschreiben Sie den bevorzugten StatusBarStyle in Ihrem Ansichts-Controller.

- -

override func viewDidLoad() {
    super.viewDidLoad()
    self.setNeedsStatusBarAppearanceUpdate()
}

override var preferredStatusBarStyle: UIStatusBarStyle {
    return .lightContent
}

Stellen Sie den Wert von .plist entsprechend der Setup-Ebene des Statusleistenstils ein. Geben Sie hier die Bildbeschreibung ein


Hier ist ein hackiger Trick zum Ändern / Festlegen der Hintergrundfarbe für die Statusleiste während des Anwendungsstarts oder während viewDidLoad Ihres View Controllers.

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
    }

}



Hier ist das Ergebnis:

Geben Sie hier die Bildbeschreibung ein

Krunal
quelle
8

Ich habe einige Dinge anders gemacht und es funktioniert für mich.

Ohne Codeänderungen habe ich meine .plist-Datei folgendermaßen konfiguriert:

  • Anzeigen der Controller-basierten Statusleiste> NEIN
  • Statusleistenstil> UIStatusBarStyleLightContent (einfache Zeichenfolge)

Ich hoffe, es hilft.

bearbeiten

Für jeden Ansichts-Controller ändere ich die Eigenschaft "Simulierte Metriken" der "Statusleiste" im Storyboard von "abgeleitet" in "Lichtinhalt".

Felipe Antonio Cardoso
quelle
8

Wenn Sie mit Swift dasselbe Ergebnis erzielen möchten, können Sie diesen Code in Ihrer AppDelegate.swift-Datei verwenden:

UINavigationBar.appearance().barStyle = .BlackTranslucent

Und der Text Ihrer Statusleiste wird weiß sein :-)!

fraxool
quelle
8

Wenn Sie View controller-based status bar appearancein info.plist weiterhin die Einstellung YES verwenden möchten, dh die Statusleiste für jeden View-Controller ändern können, verwenden Sie für weißen Text in der Statusleiste in ViewDidLoad Folgendes:

[[[self navigationController] navigationBar] setBarStyle:UIBarStyleBlackTranslucent];
eirik
quelle
Navigationsleiste! = Statusleiste.
Michael Peterson
... Hast Du es versucht!? (Und ja, für die Statusleiste)
Eirik
7

Fügen Sie in Plist Folgendes hinzu:

  • Stil der Statusleiste: UIStatusBarStyleLightContent
  • Anzeigen der Controller-basierten Statusleiste: NO
Ramdhas
quelle
7

Stellen Sie in info.plist den Feldwert NO ein. Zeigen Sie das Aussehen der Controller-basierten Statusleiste an und setzen Sie die Statusanzeige unter Ziel> allgemeine Einstellung.

parvind
quelle
2
Gewinner Gewinner Huhn Abendessen
Tommybananas
7

Lassen Sie mich Ihre Frage vollständig beantworten. Das Ändern der Textfarbe in der Statusleiste ist sehr einfach, in iOS 7 jedoch etwas verwirrend, insbesondere für Neulinge.

Wenn Sie versuchen, die Farbe im Storyboard von Schwarz auf Weiß zu ändern, indem Sie den Ansichts-Controller auswählen und auf der rechten Seite zu Simulierte Metriken wechseln, funktioniert dies nicht und ich weiß nicht warum. Es sollte funktionieren, indem man sich so ändert, aber wie auch immer.

Zweitens finden Sie die UIViewControllerBasedStatusBarAppearance-Eigenschaft nicht in Ihrer Liste, aber standardmäßig ist sie nicht vorhanden. Sie müssen es selbst hinzufügen, indem Sie auf die Schaltfläche + klicken und es dann auf NEIN setzen.

ios 7 Statusleiste Textfarbe

Zuletzt müssen Sie zu Ihrer AppDelegate.m-Datei gehen und Folgendes in die didFinishLaunchingWithOptions-Methode einfügen. Fügen Sie die folgende Zeile hinzu:

     [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];

Dadurch wird die Farbe für alle Ihre View Controller in Weiß geändert. Hoffe das hilft!

Amit Shelgaonkar
quelle
Diese Methode ist auf iOS 9
Trung Bui