Jak zmienić kolor tła paska stanu i kolor tekstu na iOS 7?


88

Moja obecna aplikacja działa na iOS 5 i 6.

Pasek nawigacji ma kolor pomarańczowy, a pasek stanu czarne tło z białym kolorem tekstu. Jednak gdy uruchamiam tę samą aplikację na iOS 7, obserwuję, że pasek stanu wygląda na przezroczysty z tym samym pomarańczowym kolorem tła co pasek nawigacji, a tekst paska stanu jest czarny.

Z tego powodu nie jestem w stanie odróżnić paska stanu od paska nawigacji.

Jak sprawić, by pasek stanu wyglądał tak samo, jak w iOS 5 i 6, czyli z czarnym tłem i białym kolorem tekstu? Jak mogę to zrobić programowo?


możesz uzyskać pomoc, korzystając z tego linku: stackoverflow.com/questions/18901753/ ...
— Utkarsh Goel

Odpowiedzi:


174

Ostrzeżenie: nie działa już z iOS 13 i Xcode 11.

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

Musiałem szukać innych sposobów. Który nie dotyczy addSubviewokna. Ponieważ przesuwam okno w górę, gdy wyświetlana jest klawiatura.

Cel C

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

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

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

Szybki

func setStatusBarBackgroundColor(color: UIColor) {

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

    statusBar.backgroundColor = color
}

Szybki 3

func setStatusBarBackgroundColor(color: UIColor) {

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

    statusBar.backgroundColor = color
}

Wywołanie tego formularza application:didFinishLaunchingWithOptionszadziałało dla mnie.

NB Mamy aplikację w sklepie z aplikacjami z tą logiką. Więc myślę, że jest to w porządku z polityką sklepu z aplikacjami.


Edytować:

Używaj na własne ryzyko. Utwórz komentatora @Sebyddd

Jedna aplikacja została odrzucona z tego powodu, podczas gdy inna została zaakceptowana. Uważają to za prywatne użycie API, więc podczas recenzowania możesz liczyć na szczęście :) - Sebyddd


5
W przeciwieństwie do przyjętego rozwiązania działa to również w przypadku zmiany orientacji. Dzięki!
— Michael,

5
Czy to nie jest prywatne użycie API?
— Foriger

2
Jedna aplikacja została odrzucona z tego powodu, podczas gdy inna została zaakceptowana. Uważają to za prywatne użycie API, więc podczas recenzowania
— możesz liczyć

3
Występuje problem z tym rozwiązaniem, po dwukrotnym naciśnięciu przycisku strony głównej ten kolor paska stanu zniknie.
— Ponadczasowy

3
Nie działa na iOS 13. Aplikacja o nazwie -statusBar lub -statusBarWindow w UIApplication: ten kod musi zostać zmieniony, ponieważ nie ma już paska stanu ani okna paska stanu. Zamiast tego użyj obiektu statusBarManager na scenie okna.
— NSDeveloper

109

Przejdź do swojej aplikacji info.plist

1) Ustaw View controller-based status bar appearancena NO
2) Ustaw Status bar stylena UIStatusBarStyleLightContent

Następnie przejdź do delegata aplikacji i wklej następujący kod, w którym ustawisz 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,[UIScreen mainScreen].bounds.size.width, 20)];
    view.backgroundColor=[UIColor blackColor];
    [self.window.rootViewController.view addSubview:view];
}

Mam nadzieję, że to pomoże.


Wystarczy wspomnieć, że dokumentacja firmy Apple zaleca to, jeśli zamiast tego sprawdź: if (NSFoundationVersionNumber <= NSFoundationVersionNumber_iOS_6_1) {} else {} na zdrowie!
— Joel Balmer

2
@learner Idź do info.plist, a następnie wybierz dowolny wiersz. Zobaczysz znak +. Kliknij znak plus iz listy rozwijanej powinieneś zobaczyć Status bar styleopcję. Wybierz to. I wklej UIStatusBarStyleLightContentjako jego wartość.
— Shahid Iqbal

5
To nie uwzględnia rotacji
— utracone tłumaczenie

4
Lepiej użyć szerokości ekranu UIScreen:UIView *view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, 20)];
— KlimczakM

2
Bardziej zwięzłym sposobem ustawienia kadru jest użycieUIApplication.sharedApplication().statusBarFrame
— Doug

28

Podczas obsługi koloru tła paska stanu w iOS 7 istnieją 2 przypadki

Przypadek 1: Widok z paskiem nawigacji

W takim przypadku użyj następującego kodu w swojej metodzie 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];

Przypadek 2: Widok bez paska nawigacji

W takim przypadku użyj następującego kodu w swojej metodzie 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 do źródła http://code-ios.blogspot.in/2014/08/how-to-change-background-color-of.html


To działało dobrze, ale pasek stanu powinien być wysoki na 20 punktów: [[UIView assign] initWithFrame: CGRectMake (0, -20, 320, 20)];
— LordParsley

27

1) ustaw UIViewControllerBasedStatusBarAppearance na YES w plist

2) w viewDidLoad wykonaj a [self setNeedsStatusBarAppearanceUpdate];

3) dodaj następującą metodę:

 -(UIStatusBarStyle)preferredStatusBarStyle{ 
    return UIStatusBarStyleLightContent; 
 } 

AKTUALIZACJA:
sprawdź także przewodnik-dla programistów po pasku stanu-ios-7


możesz zmienić go na czarny lub biały
— Muruganandham K

1
Nie ma to żadnego wpływu (ios7, symulator). „PreferowanyStatusBarStyle” nigdy nie jest wywoływany.
— Adam

1
czy używasz XIB ?. jeśli TAK, zmień wartość paska stanu we właściwości symulowanych wskaźników
— Muruganandham K

3
Ach, znalazłem problem. UINavigationController firmy Apple przechwytuje powiadomienie - tzn. Twoja odpowiedź dotyczy tylko sytuacji, gdy kontroler widoku jest kontrolerem górnym, nie ma kontenerów (bez paska zakładek, paska nawigacyjnego itp.).
— Adam

3
Specjalny przypadek w przypadku używania Storyboard + NavigationController. Wykonaj # 1 powyżej. Następnie utwórz podklasę dla UINavigationController (nazwij ją myNavController). W Storyboard ustaw klasę NavigationController na „myNavController”. W myNavController.m wykonaj # 2 & # 3 powyżej. Metoda w # 3 zostanie teraz wywołana w Twojej podklasie (ustaw dziennik lub punkt przerwania do obserwacji).
— ObjectiveTC,

16

Możesz ustawić kolor 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 obrazu tutaj


Oto wytyczne Apple / instrukcja dotycząca 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 Ustaw status bar w stylu, następnie ustaw poziom aplikacji UIViewControllerBasedStatusBarAppearancedo NOw .plist”pliku`.

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 add viewDidLoad - setNeedsStatusBarAppearanceUpdate

  3. Zastąp preferowanyStatusBarStyle w kontrolerze widoku.

-

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

override var preferredStatusBarStyle: UIStatusBarStyle {
    return .lightContent
}

Czy aplikacja zostanie odrzucona, jeśli ich użyjemy? Zmiana koloru statusBarView w ten sposób jest dozwolona?
— abhimuralidharan

@ abhi1992 Nie mogę powiedzieć, czy Apple to zaakceptuje, czy nie, ponieważ wdrożyłem to rozwiązanie w swojej aplikacji korporacyjnej, której nie trzeba przesyłać w App Store. :)
— Krunal

Jeśli umieszczę to w pliku viewdidload kontrolera widoku w aplikacji opartej na kartach, ustawia kolor dla każdego elementu viewController, nie tylko tego, w którym umieściłem kod (czy to normalne?)

14

W iOS 7 pasek stanu nie ma tła, więc jeśli umieścisz za nim czarny widok o wysokości 20 pikseli, osiągniesz ten sam wynik, co iOS 6.

Możesz również zapoznać się z Przewodnikiem przejścia na interfejs użytkownika w iOS 7, aby uzyskać dalsze informacje na ten temat.


2
Gabriele, czy możesz podać kod, jak ustawić za nim widok o wysokości 20 pikseli?
— Dejell

Dejel, to odpowiedź Shahida.
— Fattie

Nie używaj tylko „20”! Możesz uzyskać poprawną wartość, zobacz moją długą odpowiedź poniżej.
— Fattie

8

Napisz to w swojej metodzie ViewDidLoad:

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

Naprawiono w pewnym stopniu kolor paska stanu dla mnie i innych błędów interfejsu użytkownika.


7

Oto rozwiązanie typu „kopiuj i wklej” z rozszerzeniem

absolutnie poprawne wyjaśnienie

każdego problemu.

Z podziękowaniami dla Warif Akhand Rishi !

za niesamowite znalezisko dotyczące keyPath statusBarWindow.statusBar. Dobry.

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

Aby dodać do odpowiedzi Shahida - możesz uwzględnić zmiany orientacji lub różne urządzenia za pomocą tego (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];
  ...
}

Tak, jest to jeszcze lepsze do obsługi rozmiarów i orientacji ekranu. Dodaj też coś takiego do tego kodu: if (NSFoundationVersionNumber> NSFoundationVersionNumber_iOS_6_1)
— Benjamin Piette

6

do tła można łatwo dodać widok, jak na przykład:

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

gdzie „navbar” to UINavigationBar.


4
Twoje pierwsze dwie linie są poprawne. Ale ostatnia linia powinna być [navigationController.view addSubview: view]; Powinien być dodany w widoku UINavigationControllera, a nie w widoku UINavigationBar, ponieważ doda widok po 20 pikselach paska stanu, który nie nakłada się na pasek stanu.
— Shahid Iqbal,

W Swift użyj tego: 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:

// Zmień kolor tła paska stanu

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

statusBar?.backgroundColor = UIColor.red

4

Zmień kolor tła paska stanu: Swift:

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

1

W przypadku Swift 2.0 na iOS 9

Umieść następujące elementy w delegacie aplikacji w obszarze 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)

To działa, ale nie sądzę, żeby to naprawdę najlepszy sposób na radzenie sobie z tym stylem
— Michael

1

Rozwiązanie iTroid23 działało u mnie. Brakowało mi rozwiązania Swift. Więc może to jest pomocne:

1) W swoim plistie musiałem dodać to:

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

2) Nie musiałem wywoływać „setNeedsStatusBarAppearanceUpdate”.

3) Szybko musiałem dodać to do mojego UIViewController:

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

Dzięki za klucz „UIViewControllerBasedStatusBarAppearance”, pomogli mi :)
— LightNight

1

Jeśli używasz UINavigationControllerrozszerzenia, możesz użyć takiego rozszerzenia:

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

Zasadniczo sprawia, że ​​tło paska nawigacji jest przezroczyste i używa innego UIView jako tła. Możesz wywołać setNavigationBarBackgroundmetodę kontrolera nawigacji, aby ustawić kolor tła paska nawigacji wraz z paskiem stanu.

Pamiętaj, że musisz wtedy użyć setNavigationBar(hidden: Bool, animated: Bool)metody w rozszerzeniu, gdy chcesz ukryć pasek nawigacji, w przeciwnym razie widok, który był używany jako tło, będzie nadal widoczny.


Dla mnie była to najlepsza odpowiedź, ponieważ złagodziła wiele innych problemów z odpowiedziami. Wadą jest stała frame.size.height = 64, co jest błędne. Jeszcze jednym sposobem uzyskania wysokości byłoby -> .view.window? .WindowScene? .StatusBarManager? .StatusBarFrame.height ?? 0.
— Gonçalo Gaspar

1

Spróbuj tego. Użyj tego kodu w didFinishLaunchingWithOptionsfunkcji klasy 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

Poniższy fragment kodu powinien działać z celem 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
      }
  }

Otrzymasz podwójny pasek stanu na iOS 13.
— kelin

0

W przypadku koloru paska: zapewniasz niestandardowy obraz tła paska.

Kolor tekstu: skorzystaj z informacji zawartych w artykule Obsługa tekstu w systemie iOS


1
nie chodzi o ustawienie koloru tekstu
— Johnykutty

Dodanie obrazu tła to przesada, jeśli chcesz tylko ustawić jednolity kolor, i niewykonalne, zwłaszcza jeśli chcesz mieć możliwość zmiany koloru w locie
— halil_g

0

Udało mi się dostosować kolor StatusBar dość prosto, dodając AppDelegate.csplik w metodzie:

public override bool FinishedLaunching(UIApplication app, NSDictionary options)

następny kod:

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

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

Więc dostajesz coś takiego:

wprowadź opis obrazu tutaj

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


Jaki to język?
— Ahmadreza

1
@Alfi Xamarin tworzy, aw tle jego C #
— Dan,

0

Szybki 4

W Info.plistdodać tę właściwość

Wyświetl wygląd paska stanu opartego na kontrolerze na NIE

a następnie w AppDelegateśrodku didFinishLaunchingWithOptionsdodaj te wiersze kodu

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

0

W Swift 5 i 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
   }
})

Tutaj naprawiłem kolor tła paska stanu i kolor tła paska nawigacji. Jeśli nie chcesz, aby kolor paska nawigacji został skomentowany.


0

Kod 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

Możesz używać jak poniżej, dla iOS 13 * i Swift 4.

1 -> Ustaw wygląd paska stanu kontrolera widoku na NIE

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

użyj w didFinishLaunchingWithOptions

UIApplication.shared.statusBarView?.backgroundColor = UIColor.red
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.