Wie ändere ich die Hintergrundfarbe und die Textfarbe der Statusleiste unter iOS 7?

88

Meine aktuelle Anwendung läuft unter iOS 5 und 6.

Die Navigationsleiste hat eine orange Farbe und die Statusleiste hat eine schwarze Hintergrundfarbe mit weißer Textfarbe. Wenn ich jedoch dieselbe Anwendung unter iOS 7 ausführe, sehe ich, dass die Statusleiste transparent mit derselben orangefarbenen Hintergrundfarbe wie die Navigationsleiste aussieht und die Textfarbe der Statusleiste schwarz ist.

Aus diesem Grund kann ich nicht zwischen der Statusleiste und der Navigationsleiste unterscheiden.

Wie kann ich festlegen, dass die Statusleiste genauso aussieht wie in iOS 5 und 6, dh mit schwarzer Hintergrundfarbe und weißer Textfarbe? Wie kann ich das programmgesteuert machen?

Rejeesh Rajan
quelle

Antworten:

174

Warnung: Es funktioniert nicht mehr mit iOS 13 und Xcode 11.

================================================== ======================

Ich musste versuchen, nach anderen Wegen zu suchen. Was nicht beinhaltetaddSubview am Fenster beteiligt ist. Weil ich das Fenster nach oben bewege, wenn die Tastatur angezeigt wird.

Ziel c

- (void)setStatusBarBackgroundColor:(UIColor *)color {

    UIView *statusBar = [[[UIApplication sharedApplication] valueForKey:@"statusBarWindow"] valueForKey:@"statusBar"];

    if ([statusBar respondsToSelector:@selector(setBackgroundColor:)]) {
        statusBar.backgroundColor = color;
    }
}

Schnell

func setStatusBarBackgroundColor(color: UIColor) {

    guard  let statusBar = UIApplication.sharedApplication().valueForKey("statusBarWindow")?.valueForKey("statusBar") as? UIView else {
        return
    }

    statusBar.backgroundColor = color
}

Swift 3

func setStatusBarBackgroundColor(color: UIColor) {

    guard let statusBar = UIApplication.shared.value(forKeyPath: "statusBarWindow.statusBar") as? UIView else { return }

    statusBar.backgroundColor = color
}

Das Aufrufen dieses Formulars application:didFinishLaunchingWithOptionshat bei mir funktioniert.

NB Wir haben eine App im App Store mit dieser Logik. Ich denke, es ist in Ordnung mit der App Store-Richtlinie.


Bearbeiten:

Benutzung auf eigene Gefahr. Bilden Sie den Kommentator @Sebyddd

Ich hatte eine App aus diesem Grund abgelehnt, während eine andere gut angenommen wurde. Sie betrachten es als private API-Nutzung, so dass Sie während des Überprüfungsprozesses Glück haben :) - Sebyddd

Warif Akhand Rishi
quelle
5
Im Gegensatz zur akzeptierten Lösung funktioniert dies auch, wenn Sie die Ausrichtung ändern. Vielen Dank!
Michael
5
Ist das nicht eine private API-Nutzung?
Foriger
2
Ich hatte eine App aus diesem Grund abgelehnt, während eine andere gut angenommen wurde. Sie betrachten es als private API-Nutzung, so dass Sie während des Überprüfungsprozesses Glück haben :)
Sebyddd
3
Bei dieser Lösung tritt ein Problem auf. Wenn Sie die Home-Taste zweimal drücken, verschwindet die Farbe dieser Statusstatusleiste.
Zeitlos
3
Funktioniert nicht unter iOS 13. App mit dem Namen -statusBar oder -statusBarWindow bei UIApplication: Dieser Code muss geändert werden, da keine Statusleiste oder kein Statusleistenfenster mehr vorhanden ist. Verwenden Sie stattdessen das statusBarManager-Objekt in der Fensterszene.
NSDeveloper
109

Gehe zu deiner App info.plist

1) Setze View controller-based status bar appearanceauf NO
2) Setze Status bar styleauf UIStatusBarStyleLightContent

Dann Gehe zu deinem App-Delegaten und füge den folgenden Code ein, in dem du den RootViewController deines Windows festlegst.

#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,[UIScreen mainScreen].bounds.size.width, 20)];
    view.backgroundColor=[UIColor blackColor];
    [self.window.rootViewController.view addSubview:view];
}

Ich hoffe es hilft.

Shahid Iqbal
quelle
Apple Docs empfehlen dies nur, wenn Sie stattdessen Folgendes überprüfen: if (NSFoundationVersionNumber <= NSFoundationVersionNumber_iOS_6_1) {} else {} Prost!
Joel Balmer
2
@Learner Gehe zu info.plist und wähle dann eine beliebige Zeile aus. Sie sehen ein + Zeichen. Klicken Sie auf das Pluszeichen und in der Dropdown-Liste sollte Status bar styleOption angezeigt werden. Wählen Sie es aus. Und UIStatusBarStyleLightContentals Wert einfügen .
Shahid Iqbal
5
Dies berücksichtigt nicht die Rotation
Übersetzung
4
Es ist besser, UIScreen Breite zu verwenden:UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, 20)];
KlimczakM
2
Ein prägnanter Weise den Rahmen festgelegt ist unter VerwendungUIApplication.sharedApplication().statusBarFrame
Doug
28

Bei der Behandlung der Hintergrundfarbe der Statusleiste in iOS 7 gibt es zwei Fälle

Fall 1: Ansicht mit Navigationsleiste

Verwenden Sie in diesem Fall den folgenden Code in Ihrer viewDidLoad-Methode

 UIApplication *app = [UIApplication sharedApplication];
 CGFloat statusBarHeight = app.statusBarFrame.size.height;

 UIView *statusBarView = [[UIView alloc] initWithFrame:CGRectMake(0, -statusBarHeight, [UIScreen mainScreen].bounds.size.width, statusBarHeight)];
 statusBarView.backgroundColor = [UIColor yellowColor];
 [self.navigationController.navigationBar addSubview:statusBarView];

Fall 2: Ansicht ohne Navigationsleiste

Verwenden Sie in diesem Fall den folgenden Code in Ihrer viewDidLoad-Methode

 UIApplication *app = [UIApplication sharedApplication];
 CGFloat statusBarHeight = app.statusBarFrame.size.height;

 UIView *statusBarView =  [[UIView alloc] initWithFrame:CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, statusBarHeight)];
 statusBarView.backgroundColor  =  [UIColor yellowColor];
 [self.view addSubview:statusBarView];

Quelllink http://code-ios.blogspot.in/2014/08/how-to-change-background-color-of.html

Teja Kumar Bethina
quelle
Dies hat bei mir gut funktioniert, aber die Statusleiste sollte 20pt hoch sein: [[UIView alloc] initWithFrame: CGRectMake (0, -20, 320, 20)];
LordParsley
27

1) Setzen Sie die UIViewControllerBasedStatusBarAppearance in der Liste auf YES

2) in viewDidLoad a [self setNeedsStatusBarAppearanceUpdate];

3) Fügen Sie die folgende Methode hinzu:

 -(UIStatusBarStyle)preferredStatusBarStyle{ 
    return UIStatusBarStyleLightContent; 
 } 

UPDATE:
Überprüfen Sie auch den Entwicklerleitfaden zur ios-7-Statusleiste

Muruganandham K.
quelle
Sie können es in schwarz oder weiß ändern
Muruganandham K
1
Dies hat keine Auswirkung (ios7, Simulator). Der "bevorzugteStatusBarStyle" wird niemals aufgerufen.
Adam
1
Verwenden Sie xib?. Wenn JA, ändern Sie den Statusleistenwert in der Eigenschaft für simulierte Metriken
Muruganandham K
3
Ah, ich habe das Problem gefunden. Der UINavigationController von Apple erfasst die Benachrichtigung. Das heißt, Ihre Antwort gilt nur, wenn der View Controller der oberste Controller ist und keine Container vorhanden sind (keine Registerkartenleiste, keine Navigationsleiste usw.).
Adam
3
Sonderfall bei Verwendung von Storyboard + NavigationController. Mach # 1 oben. Erstellen Sie als Nächstes eine Unterklasse für UINavigationController (nennen Sie sie myNavController). Setzen Sie im Storyboard die Klasse des NavigationControllers auf "myNavController". Führen Sie in myNavController.m die obigen Schritte 2 und 3 aus. Die Methode in # 3 wird jetzt in Ihrer Unterklasse aufgerufen (legen Sie ein Protokoll oder einen Haltepunkt fest, den Sie beobachten möchten).
ObjectiveTC
16

Sie können die Hintergrundfarbe für die Statusleiste während des Anwendungsstarts oder während viewDidLoad Ihres View Controllers festlegen.

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


Hier finden Sie die 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 den Statusleistenstil festlegen möchten, stellen Sie die Anwendungsebene UIViewControllerBasedStatusBarAppearanceauf einNO in Ihrer `.plist‘ Datei.

Wenn Sie den Statusleistenstil auf Ansicht des Controllers 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
}
Krunal
quelle
Wird die App abgelehnt, wenn wir diese verwenden? Das Ändern der statusBarView-Farbe wie folgt ist zulässig?
Abhimuralidharan
@ abhi1992 Ich kann nicht sagen, ob Apple dies akzeptiert oder nicht, da ich diese Lösung in meiner Unternehmensanwendung implementiert habe, die nicht im App Store eingereicht werden muss. :)
Krunal
Wenn ich dies in einen viewdidload eines viewcontrollers in einer tab-basierten App einfüge, wird die Farbe für jeden viewController festgelegt, nicht nur für den, in den ich den Code
14

In iOS 7 hat die Statusleiste keinen Hintergrund. Wenn Sie also eine schwarze, 20 Pixel hohe Ansicht dahinter platzieren, erzielen Sie das gleiche Ergebnis wie in iOS 6.

Weitere Informationen zu diesem Thema finden Sie im iOS 7 UI Transition Guide .

Gabriele Petronella
quelle
2
Gabriele, können Sie bitte einen Code angeben, wie Sie eine 20-Pixel-Ansicht dahinter platzieren können?
Dejell
Dejel, das ist Shahids Antwort.
Fattie
Verwenden Sie nicht nur "20"! Sie können den Wert richtig erhalten, siehe meine lange Antwort unten.
Fattie
8

Schreiben Sie dies in Ihre ViewDidLoad-Methode:

if ([self respondsToSelector:@selector(setEdgesForExtendedLayout:)]) {
    self.edgesForExtendedLayout=UIRectEdgeNone;
    self.extendedLayoutIncludesOpaqueBars=NO;
    self.automaticallyAdjustsScrollViewInsets=NO;
}

Es hat die Farbe der Statusleiste für mich und andere Fehlplatzierungen der Benutzeroberfläche ebenfalls in gewissem Umfang behoben.

Sanjana
quelle
7

Hier ist eine vollständige Lösung zum Kopieren und Einfügen mit einem

absolut korrekte Erklärung

von jedem Problem beteiligt.

Vielen Dank an Warif Akhand Rishi !

für den erstaunlichen Fund bezüglich keyPath statusBarWindow.statusBar. Gut.

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    
    // handle the iOS bar!
    
    // >>>>>NOTE<<<<<
    // >>>>>NOTE<<<<<
    // >>>>>NOTE<<<<<
    // "Status Bar Style" refers to the >>>>>color of the TEXT<<<<<< of the Apple status bar,
    // it does NOT refer to the background color of the bar. This causes a lot of confusion.
    // >>>>>NOTE<<<<<
    // >>>>>NOTE<<<<<
    // >>>>>NOTE<<<<<
    
    // our app is white, so we want the Apple bar to be white (with, obviously, black writing)
    
    // make the ultimate window of OUR app actually start only BELOW Apple's bar....
    // so, in storyboard, never think about the issue. design to the full height in storyboard.
    let h = UIApplication.shared.statusBarFrame.size.height
    let f = self.window?.frame
    self.window?.frame = CGRect(x: 0, y: h, width: f!.size.width, height: f!.size.height - h)
    
    // next, in your plist be sure to have this: you almost always want this anyway:
    // <key>UIViewControllerBasedStatusBarAppearance</key>
    // <false/>
    
    // next - very simply in the app Target, select "Status Bar Style" to Default.
    // Do nothing in the plist regarding "Status Bar Style" - in modern Xcode, setting
    // the "Status Bar Style" toggle simply sets the plist for you.
    
    // finally, method A:
    // set the bg of the Apple bar to white.  Technique courtesy Warif Akhand Rishi.
    // note: self.window?.clipsToBounds = true-or-false, makes no difference in method A.
    if let sb = UIApplication.shared.value(forKeyPath: "statusBarWindow.statusBar") as? UIView {
        sb.backgroundColor = UIColor.white
        // if you prefer a light gray under there...
        //sb.backgroundColor = UIColor(hue: 0, saturation: 0, brightness: 0.9, alpha: 1)
    }
    
    /*
    // if you prefer or if necessary, method B:
    // explicitly actually add a background, in our app, to sit behind the apple bar....
    self.window?.clipsToBounds = false // MUST be false if you use this approach
    let whiteness = UIView()
    whiteness.frame = CGRect(x: 0, y: -h, width: f!.size.width, height: h)
    whiteness.backgroundColor = UIColor.green
    self.window!.addSubview(whiteness)
    */
    
    return true
}
Fattie
quelle
6

Nur um Shahids Antwort zu ergänzen: Mit diesem (iOS7 +) können Sie Orientierungsänderungen oder andere Geräte berücksichtigen:

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

  //Create the background
  UIView* statusBg = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.window.frame.size.width, 20)];
  statusBg.backgroundColor = [UIColor colorWithWhite:1 alpha:.7];

  //Add the view behind the status bar
  [self.window.rootViewController.view addSubview:statusBg];

  //set the constraints to auto-resize
  statusBg.translatesAutoresizingMaskIntoConstraints = NO;
  [statusBg.superview addConstraint:[NSLayoutConstraint constraintWithItem:statusBg attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:statusBg.superview attribute:NSLayoutAttributeTop multiplier:1.0 constant:0.0]];
  [statusBg.superview addConstraint:[NSLayoutConstraint constraintWithItem:statusBg attribute:NSLayoutAttributeLeft relatedBy:NSLayoutRelationEqual toItem:statusBg.superview attribute:NSLayoutAttributeLeft multiplier:1.0 constant:0.0]];
  [statusBg.superview addConstraint:[NSLayoutConstraint constraintWithItem:statusBg attribute:NSLayoutAttributeRight relatedBy:NSLayoutRelationEqual toItem:statusBg.superview attribute:NSLayoutAttributeRight multiplier:1.0 constant:0.0]];
  [statusBg.superview addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:[statusBg(==20)]" options:0 metrics:nil views:NSDictionaryOfVariableBindings(statusBg)]];
  [statusBg.superview setNeedsUpdateConstraints];
  ...
}
Bendytree
quelle
Ja, dies ist noch besser für Bildschirmgrößen und -ausrichtungen. Fügen Sie auch so etwas um diesen Code hinzu: if (NSFoundationVersionNumber> NSFoundationVersionNumber_iOS_6_1)
Benjamin Piette
6

Für den Hintergrund können Sie einfach eine Ansicht hinzufügen, wie im Beispiel:

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:0.1];
[navbar addSubview:view];

Dabei ist "navbar" eine UINavigationBar.

user3107409
quelle
4
Ihre ersten beiden Zeilen sind korrekt. Die letzte Zeile sollte jedoch [navigationController.view addSubview: view] sein. Es sollte in der Ansicht von UINavigationController und nicht in der Ansicht von UINavigationBar hinzugefügt werden, da die Ansicht nach 20 px der Statusleiste hinzugefügt wird und sich die Statusleiste nicht überlappt.
Shahid Iqbal
Verwenden Sie in Swift Folgendes: let rect = CGRect (x: 0, y: 0, width: UIScreen.main.bounds.width, height: UIApplication.shared.statusBarFrame.height) let bar = UIView (frame: rect) bar.backgroundColor = UIColor.white navigationController? .View.addSubview (bar)
JVS
5

Swift 4:

// Hintergrundfarbe der Statusleiste ändern

let statusBar = UIApplication.shared.value(forKeyPath: "statusBarWindow.statusBar") as? UIView

statusBar?.backgroundColor = UIColor.red
V. Kumar
quelle
4

Hintergrundfarbe der Statusleiste ändern: Schnell:

let proxyViewForStatusBar : UIView = UIView(frame: CGRectMake(0, 0,self.view.frame.size.width, 20))    
        proxyViewForStatusBar.backgroundColor=UIColor.whiteColor()
        self.view.addSubview(proxyViewForStatusBar)
Yogesh Lolusare
quelle
1

Im Fall von Swift 2.0 unter iOS 9

Fügen Sie Folgendes in den App-Delegaten unter didFinishLaunchingWithOptions ein:

    let view: UIView = UIView.init(frame: CGRectMake(0, 0, UIScreen.mainScreen().bounds.size.width, 20))

    view.backgroundColor = UIColor.blackColor()  //The colour you want to set

    view.alpha = 0.1   //This and the line above is set like this just if you want 
                          the status bar a darker shade of 
                          the colour you already have behind it.

    self.window!.rootViewController!.view.addSubview(view)
Keegan Cruickshank
quelle
Das funktioniert, aber ich denke nicht, dass es wirklich der beste Weg ist, mit diesem Stil
Michael
1

Die iTroid23-Lösung hat bei mir funktioniert. Ich habe die Swift-Lösung verpasst. Vielleicht ist das also hilfreich:

1) In meiner Liste musste ich Folgendes hinzufügen:

<key>UIViewControllerBasedStatusBarAppearance</key>
<true/>

2) Ich musste "setNeedsStatusBarAppearanceUpdate" nicht aufrufen.

3) In Kürze musste ich dies meinem UIViewController hinzufügen:

override func preferredStatusBarStyle() -> UIStatusBarStyle {
    return UIStatusBarStyle.LightContent
}
Dolch
quelle
Vielen Dank für den Schlüssel "UIViewControllerBasedStatusBarAppearance", der mir geholfen hat :)
LightNight
1

Wenn Sie a verwenden UINavigationController, können Sie eine Erweiterung wie die folgende verwenden:

extension UINavigationController {
    private struct AssociatedKeys {
        static var navigationBarBackgroundViewName = "NavigationBarBackground"
    }

    var navigationBarBackgroundView: UIView? {
        get {
            return objc_getAssociatedObject(self,
                                        &AssociatedKeys.navigationBarBackgroundViewName) as? UIView
        }
        set(newValue) {
             objc_setAssociatedObject(self,
                                 &AssociatedKeys.navigationBarBackgroundViewName,
                                 newValue,
                                 .OBJC_ASSOCIATION_RETAIN)
        }
    }

    func setNavigationBar(hidden isHidden: Bool, animated: Bool = false) {
       if animated {
           UIView.animate(withDuration: 0.3) {
               self.navigationBarBackgroundView?.isHidden = isHidden
           }
       } else {
           navigationBarBackgroundView?.isHidden = isHidden
       }
    }

    func setNavigationBarBackground(color: UIColor, includingStatusBar: Bool = true, animated: Bool = false) {
        navigationBarBackgroundView?.backgroundColor = UIColor.clear
        navigationBar.backgroundColor = UIColor.clear
        navigationBar.barTintColor = UIColor.clear

        let setupOperation = {
            if includingStatusBar {
                self.navigationBarBackgroundView?.isHidden = false
                if self.navigationBarBackgroundView == nil {
                    self.setupBackgroundView()
                }
                self.navigationBarBackgroundView?.backgroundColor = color
            } else {
                self.navigationBarBackgroundView?.isHidden = true
                self.navigationBar.backgroundColor = color
            }
        }

        if animated {
            UIView.animate(withDuration: 0.3) {
                setupOperation()
            }
        } else {
            setupOperation()
        }
    }

    private func setupBackgroundView() {
        var frame = navigationBar.frame
        frame.origin.y = 0
        frame.size.height = 64

        navigationBarBackgroundView = UIView(frame: frame)
        navigationBarBackgroundView?.translatesAutoresizingMaskIntoConstraints = true
        navigationBarBackgroundView?.autoresizingMask = [.flexibleWidth, .flexibleBottomMargin]

        navigationBarBackgroundView?.isUserInteractionEnabled = false

        view.insertSubview(navigationBarBackgroundView!, aboveSubview: navigationBar)
    }
}

Grundsätzlich wird der Hintergrund der Navigationsleiste transparent und es wird eine andere UIView als Hintergrund verwendet. Sie können die setNavigationBarBackgroundMethode Ihres Navigationscontrollers aufrufen , um die Hintergrundfarbe der Navigationsleiste zusammen mit der Statusleiste festzulegen.

Beachten Sie, dass Sie dann die setNavigationBar(hidden: Bool, animated: Bool)Methode in der Erweiterung verwenden müssen, wenn Sie die Navigationsleiste ausblenden möchten, da sonst die Ansicht, die als Hintergrund verwendet wurde, weiterhin sichtbar ist.

halil_g
quelle
Für mich war dies die beste Antwort, da dadurch viele andere Antwortprobleme gemildert wurden. Der Nachteil ist die feste Rahmengröße = 64, was falsch ist. Eine neuere Methode zum Ermitteln der Höhe wäre -> .view.window? .WindowScene? .StatusBarManager? .StatusBarFrame.height ?? 0.
Gonçalo Gaspar
1

Versuche dies. Verwenden Sie diesen Code in Ihrer Appdelegate-Klassenfunktion didFinishLaunchingWithOptions:

[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
[application setStatusBarHidden:NO];
UIView *statusBar = [[[UIApplication sharedApplication] valueForKey:@"statusBarWindow"] valueForKey:@"statusBar"];
if ([statusBar respondsToSelector:@selector(setBackgroundColor:)]) {
    statusBar.backgroundColor = [UIColor blackColor];
}
Karthickkck
quelle
1

Das folgende Codefragment sollte mit Ziel C funktionieren.

   if (@available(iOS 13.0, *)) {
      UIView *statusBar = [[UIView alloc]initWithFrame:[UIApplication sharedApplication].keyWindow.windowScene.statusBarManager.statusBarFrame] ;
      statusBar.backgroundColor = [UIColor whiteColor];
      [[UIApplication sharedApplication].keyWindow addSubview:statusBar];
  } else {
      // Fallback on earlier versions

       UIView *statusBar = [[[UIApplication sharedApplication] valueForKey:@"statusBarWindow"] valueForKey:@"statusBar"];
          if ([statusBar respondsToSelector:@selector(setBackgroundColor:)]) {
              statusBar.backgroundColor = [UIColor whiteColor];//set whatever color you like
      }
  }
Govind
quelle
Sie erhalten eine doppelte Statusleiste unter iOS 13.
kelin
0

Für Balkenfarbe: Sie geben ein benutzerdefiniertes Hintergrundbild für den Balken an.

Für die Textfarbe: Verwenden Sie die Informationen unter Informationen zur Textverarbeitung in iOS

Chris Alan
quelle
1
Hier geht es nicht darum, eine Textfarbe festzulegen
Johnykutty
Das Hinzufügen eines Hintergrundbildes ist ein Overkill, wenn Sie nur eine Volltonfarbe festlegen möchten, und nicht möglich, insbesondere wenn Sie die Farbe im
laufenden Betrieb
0

Es ist mir gelungen, die StatusBar-Farbe ziemlich einfach anzupassen, indem ich eine AppDelegate.csDatei in der Methode hinzufügte :

public override bool FinishedLaunching(UIApplication app, NSDictionary options)

nächster Code:

UIView statusBar = UIApplication.SharedApplication.ValueForKey(new NSString("statusBar")) as UIView;

if (statusBar!=null && statusBar.RespondsToSelector(new Selector("setBackgroundColor:")))
{
   statusBar.BackgroundColor = Color.FromHex(RedColorHex).ToUIColor();
}

Sie bekommen also so etwas:

Geben Sie hier die Bildbeschreibung ein

Link: https://jorgearamirez.wordpress.com/2016/07/18/lesson-x-effects-for-the-status-bar/

Dan
quelle
Welche Sprache ist das?
Ahmadreza
1
@Alfi Xamarin bildet und im Hintergrund sein C #
Dan
0

Swift 4

Im Info.plist dieser Unterkunft

Zeigen Sie das Controller-basierte Statusleisten-Erscheinungsbild auf NO an

und danach in AppDelegateInneren der didFinishLaunchingWithOptionsdiese Zeilen Code hinzufügen

UIApplication.shared.isStatusBarHidden = false
UIApplication.shared.statusBarStyle = .lightContent
Smg baquer
quelle
0

In Swift 5 und Xcode 10.2

DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + Double(Int64(0.1 * Double(NSEC_PER_SEC))) / Double(NSEC_PER_SEC), execute: {

//Set status bar background colour
let statusBar = UIApplication.shared.value(forKeyPath: "statusBarWindow.statusBar") as? UIView
statusBar?.backgroundColor = UIColor.red
//Set navigation bar subView background colour
   for view in controller.navigationController?.navigationBar.subviews ?? [] {
      view.tintColor = UIColor.white
      view.backgroundColor = UIColor.red
   }
})

Hier habe ich die Hintergrundfarbe der Statusleiste und die Hintergrundfarbe der Navigationsleiste festgelegt. Wenn Sie nicht möchten, kommentieren Sie die Farbe der Navigationsleiste.

iOS
quelle
0

SWIFT-Code

            let statusBarView = UIView(frame: CGRect(x: 0, y: 0, width: view.width, height: 20.0))
            statusBarView.backgroundColor = UIColor.red
            self.navigationController?.view.addSubview(statusBarView)
Samkit Jain
quelle