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?

Rejeesh Rajan
źródło

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

Warif Akhand Rishi
źródło
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.

Shahid Iqbal
źródło
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

Teja Kumar Bethina
źródło
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

Muruganandham K
źródło
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
}
Krunal
źródło
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.

Gabriele Petronella
źródło
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.

sanjana
źródło
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
}
Fattie
źródło
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];
  ...
}
bendytree
źródło
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.

user3107409
źródło
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
V.Kumar
źródło
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)
Yogesh Lolusare
źródło
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)
Keegan Cruickshank
źródło
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
}
Sztylet
źródło
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.

halil_g
źródło
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];
}
Karthickkck
źródło
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
      }
  }
Govind
źródło
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

Chris Alan
źródło
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/

Dan
źródło
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
Smg baquer
źródło
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.

iOS
źródło
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)
Samkit Jain
źródło
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
Lokesh
źródło