Come modificare il colore di sfondo della barra di stato e il colore del testo su iOS 7?


88

La mia attuale applicazione funziona su iOS 5 e 6.

La barra di navigazione ha un colore arancione e la barra di stato ha un colore di sfondo nero con colore del testo bianco. Tuttavia, quando eseguo la stessa applicazione su iOS 7, osservo che la barra di stato appare trasparente con lo stesso colore di sfondo arancione della barra di navigazione e il colore del testo della barra di stato è nero.

Per questo motivo non sono in grado di distinguere tra la barra di stato e la barra di navigazione.

Come faccio a fare in modo che la barra di stato abbia lo stesso aspetto di iOS 5 e 6, ovvero con il colore di sfondo nero e il colore del testo bianco? Come posso farlo a livello di codice?


puoi ottenere aiuto con questo link: stackoverflow.com/questions/18901753/…
Utkarsh Goel

Risposte:


174

Attenzione: non funziona più con iOS 13 e Xcode 11.

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

Ho dovuto provare a cercare altri modi. Che non coinvolge la addSubviewfinestra. Perché mi sposto nella finestra quando viene presentata la tastiera.

Obiettivo-C

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

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

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

Swift

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
}

Chiamare questo modulo ha application:didFinishLaunchingWithOptionsfunzionato per me.

NB Abbiamo un'app nell'app store con questa logica. Quindi immagino che vada bene con la politica dell'app store.


Modificare:

Utilizzare a proprio rischio. Forma il commentatore @Sebyddd

Un'app è stata rifiutata per questo motivo, mentre un'altra è stata accettata perfettamente. Lo considerano un utilizzo API privato, quindi sei soggetto a fortuna durante il processo di revisione :) - Sebyddd


5
A differenza della soluzione accettata, funziona anche quando cambi orientamento. Grazie!
Michael

5
Non è l'utilizzo di API private?
Foriger

2
Un'app è stata rifiutata per questo motivo, mentre un'altra è stata accettata perfettamente. Lo considerano un utilizzo API privato, quindi sei soggetto a fortuna durante il processo di revisione :)
Sebyddd

3
C'è un problema con questa soluzione, quando si preme due volte il pulsante Home, il colore della barra di stato scompare.
Timeless

3
Non funziona su iOS 13. App chiamata -statusBar o -statusBarWindow su UIApplication: questo codice deve essere modificato poiché non c'è più una barra di stato o una finestra della barra di stato. Utilizzare invece l'oggetto statusBarManager sulla scena della finestra.
NSDeveloper

109

Vai alla tua app info.plist

1) Imposta View controller-based status bar appearancesu NO
2) Imposta Status bar stylesu UIStatusBarStyleLightContent

Quindi Vai al delegato dell'app e incolla il codice seguente nel punto in cui hai impostato il RootViewController di 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,[UIScreen mainScreen].bounds.size.width, 20)];
    view.backgroundColor=[UIColor blackColor];
    [self.window.rootViewController.view addSubview:view];
}

Spero che sia d'aiuto.


Solo menzionando, Apple Docs consiglia questo se controlla invece: if (NSFoundationVersionNumber <= NSFoundationVersionNumber_iOS_6_1) {} else {} applausi!
Joel Balmer

2
@learner Goto info.plist e quindi seleziona una riga qualsiasi. Vedrai un segno +. Fare clic sul segno più e dal menu a discesa, dovresti vedere Status bar styleOpzione. Selezionalo. E incolla UIStatusBarStyleLightContentcome valore.
Shahid Iqbal

5
Questo non tiene conto della rotazione
lostintranslation

4
È meglio usare la larghezza dello schermo UIS:UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, 20)];
KlimczakM

2
Un modo più succinto per impostare la cornice è usareUIApplication.sharedApplication().statusBarFrame
Doug

28

Durante la gestione del colore di sfondo della barra di stato in iOS 7, ci sono 2 casi

Caso 1: visualizzazione con barra di navigazione

In questo caso, usa il codice seguente nel tuo metodo viewDidLoad

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

Caso 2: visualizzazione senza barra di navigazione

In questo caso, usa il codice seguente nel tuo metodo viewDidLoad

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

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


Questo ha funzionato bene per me, ma la barra di stato dovrebbe essere alta 20pt: [[UIView alloc] initWithFrame: CGRectMake (0, -20, 320, 20)];
LordParsley,

27

1) imposta UIViewControllerBasedStatusBarAppearance su YES nel plist

2) in viewDidLoad fare a [self setNeedsStatusBarAppearanceUpdate];

3) aggiungi il seguente metodo:

 -(UIStatusBarStyle)preferredStatusBarStyle{ 
    return UIStatusBarStyleLightContent; 
 } 

AGGIORNAMENTO:
controlla anche la guida-per-sviluppatori-alla-barra-di-stato-ios-7


puoi cambiarlo in bianco o nero
Muruganandham K

1
Questo non ha alcun effetto (iOS7, simulatore). "PreferredStatusBarStyle" non viene mai richiamato.
Adam

1
stai usando xib ?. se SÌ cambia il valore della barra di stato nella proprietà delle metriche simulate
Muruganandham K

3
Ah, ho trovato il problema. L'UINavigationController di Apple acquisisce la notifica, ovvero la tua risposta è solo per quando il controller di visualizzazione è il controller superiore, non ci sono contenitori (nessuna barra delle schede, nessuna barra di navigazione, ecc.).
Adam

3
Caso speciale quando si utilizza Storyboard + NavigationController. Fai # 1 sopra. Successivamente, crea una sottoclasse per UINavigationController (chiamalo myNavController). In Storyboard, imposta la classe di NavigationController su "myNavController". In myNavController.m, eseguire i punti 2 e 3 sopra. Il metodo in # 3 verrà ora chiamato nella tua sottoclasse (imposta un log o un punto di interruzione da osservare).
ObjectiveTC

16

È possibile impostare il colore di sfondo per la barra di stato durante l'avvio dell'applicazione o durante viewDidLoad del controller di visualizzazione.

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
    }

}



Ecco il risultato:

inserisci qui la descrizione dell'immagine


Qui è linee guida / istruzioni Apple sulla modifica della barra di stato. Solo scuro e chiaro (mentre e nero) sono consentiti nella barra di stato.

Ecco - Come modificare lo stile della barra di stato:

Se si desidera impostare lo stile della barra di stato, impostare il livello di applicazione UIViewControllerBasedStatusBarAppearance su NOnel file ".plist".

se vuoi impostare lo stile della barra di stato, a livello di controller di visualizzazione, segui questi passaggi:

  1. Imposta il UIViewControllerBasedStatusBarAppearanceaYES nel .plistfile, se è necessario impostare lo stile della barra di stato solo a livello di UIViewController.
  2. Nella funzione di aggiunta viewDidLoad - setNeedsStatusBarAppearanceUpdate

  3. eseguire l'override di preferredStatusBarStyle nel controller della vista.

-

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

override var preferredStatusBarStyle: UIStatusBarStyle {
    return .lightContent
}

L'app verrà rifiutata se li utilizziamo? La modifica del colore statusBarView in questo modo è consentita?
abhimuralidharan

@ abhi1992 Non posso dire se Apple lo accetterà o meno perché ho implementato questa soluzione nella mia applicazione aziendale, che non ha bisogno di essere inviata su App Store. :)
Krunal

Se lo metto in un viewdidload di un viewcontroller in un'app basata su schede, imposta il colore per ogni viewController, non solo quello in cui ho inserito il codice (è normale?)

14

In iOS 7 la barra di stato non ha uno sfondo, quindi se metti una vista nera alta 20px dietro di essa otterrai lo stesso risultato di iOS 6.

Inoltre potresti voler leggere la guida alla transizione dell'interfaccia utente di iOS 7 per ulteriori informazioni sull'argomento.


2
Gabriele, puoi per favore fornire il codice su come mettere una visuale alta 20px dietro di essa?
Dejell

Dejel, questa è la risposta di Shahid.
Fattie

Non usare solo "20"! Puoi ottenere il valore correttamente, vedi la mia risposta lunga di seguito.
Fattie

8

Scrivi questo nel tuo metodo ViewDidLoad:

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

Ha corretto il colore della barra di stato per me e anche altri errori dell'interfaccia utente in una certa misura.


7

Ecco una soluzione totale, copia e incolla, con estensione

spiegazione assolutamente corretta

di ogni problema coinvolto.

Grazie a Warif Akhand Rishi !

per la straordinaria scoperta di keyPath statusBarWindow.statusBar. Bene.

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
}

6

Solo per aggiungere alla risposta di Shahid, puoi tenere conto dei cambiamenti di orientamento o di diversi dispositivi usando questo (iOS7 +):

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

Sì, è ancora meglio gestire le dimensioni e gli orientamenti dello schermo. Aggiungi anche qualcosa di simile a questo codice: if (NSFoundationVersionNumber> NSFoundationVersionNumber_iOS_6_1)
Benjamin Piette

6

per lo sfondo puoi facilmente aggiungere una vista, come nell'esempio:

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

dove "navbar" è una UINavigationBar.


4
Le prime due righe sono corrette .. Ma l'ultima riga dovrebbe essere [navigationController.view addSubview: view]; Dovrebbe essere aggiunto nella vista di UINavigationController e non nella vista di UINavigationBar in quanto aggiungerà una vista dopo 20 px della barra di stato che non si sovrappone alla barra di stato.
Shahid Iqbal

In Swift usa questo: 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:

// Cambia il colore di sfondo della barra di stato

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

statusBar?.backgroundColor = UIColor.red

4

Cambia il colore di sfondo della barra di stato: Swift:

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

1

Nel caso di swift 2.0 su iOS 9

Inserisci quanto segue nel delegato dell'app, in didFinishLaunchingWithOptions:

    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)

Funziona, ma non credo che sia davvero il modo migliore per gestire questo stile
Michael

1

La soluzione iTroid23 ha funzionato per me. Ho perso la soluzione Swift. Quindi forse questo è utile:

1) Nel mio plist ho dovuto aggiungere questo:

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

2) Non avevo bisogno di chiamare "setNeedsStatusBarAppearanceUpdate".

3) In breve ho dovuto aggiungere questo al mio UIViewController:

override func preferredStatusBarStyle() -> UIStatusBarStyle {
    return UIStatusBarStyle.LightContent
}

Grazie per il tasto "UIViewControllerBasedStatusBarAppearance", mi ha aiutato :)
LightNight

1

Se stai usando a UINavigationController, puoi usare un'estensione come questa:

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

Fondamentalmente rende trasparente lo sfondo della barra di navigazione e utilizza un'altra UIView come sfondo. È possibile chiamare il setNavigationBarBackgroundmetodo del controller di navigazione per impostare il colore di sfondo della barra di navigazione insieme alla barra di stato.

Tieni presente che devi quindi utilizzare il setNavigationBar(hidden: Bool, animated: Bool)metodo nell'estensione quando vuoi nascondere la barra di navigazione altrimenti la vista che è stata utilizzata come sfondo sarà comunque visibile.


Per me questa è stata la risposta migliore poiché ha mitigato molti altri problemi di risposta. Lo svantaggio è il frame.size.height = 64 fisso che è sbagliato. Un modo più recente per ottenere l'altezza sarebbe -> .view.window? .WindowScene? .StatusBarManager? .StatusBarFrame.height ?? 0.
Gonçalo Gaspar

1

Prova questo. Usa questo codice nella tua didFinishLaunchingWithOptionsfunzione di classe appdelegate :

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

1

Lo snippet di codice seguente dovrebbe funzionare con Objective C.

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

Riceverai una doppia barra di stato su iOS 13.
kelin

0

Per il colore della barra: fornisci un'immagine di sfondo personalizzata per la barra.

Per il colore del testo: utilizza le informazioni in Informazioni sulla gestione del testo in iOS


1
non si tratta di impostare un colore per il testo
Johnykutty

Aggiungere un'immagine di sfondo è eccessivo se si desidera impostare solo un colore solido e non è fattibile soprattutto se si desidera essere in grado di cambiare il colore al volo
halil_g

0

Sono riuscito a personalizzare il colore di StatusBar in modo abbastanza semplice aggiungendo AppDelegate.csfile nel metodo:

public override bool FinishedLaunching(UIApplication app, NSDictionary options)

codice successivo:

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

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

Quindi ottieni qualcosa del genere:

inserisci qui la descrizione dell'immagine

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


Che lingua è questa?
Ahmadreza

1
@Alfi Xamarin si forma e in background il suo C #
Dan

0

Swift 4

Nel Info.plist aggiungere questa proprietà

Visualizza l'aspetto della barra di stato basata su controller su NO

e dopo di che AppDelegatedentro didFinishLaunchingWithOptionsaggiungi queste righe di codice

UIApplication.shared.isStatusBarHidden = false
UIApplication.shared.statusBarStyle = .lightContent

0

In Swift 5 e 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
   }
})

Qui ho corretto il colore di sfondo della barra di stato e il colore di sfondo della barra di navigazione. Se non desideri il colore della barra di navigazione, commentalo.


0

Codice SWIFT

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

0

Puoi usare come di seguito, per iOS 13 * e Swift 4.

1 -> Imposta la visualizzazione della barra di stato basata sul controller su NO

extension UIApplication {
var statusBarView: UIView? {
    if #available(iOS 13.0, *) {
       let statusBar =  UIView()

        statusBar.frame = UIApplication.shared.statusBarFrame

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

utilizzare in didFinishLaunchingWithOptions

UIApplication.shared.statusBarView?.backgroundColor = UIColor.red
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.