2017-03-28 7 views
7

Ich versuche, die Farbe der Statusleiste zu einer blauen oder einer anderen Farbe zu ändern.Ändern der Farbe der Statusleiste

Ist das möglich, oder lässt Apple das nicht zu?

+1

Basierend auf den zwei Antworten (mit Kommentaren), ist die Antwort (wie ich dachte) ** nein **. Sie können (1) die Schriftfarbe einer Statusleiste ändern oder (2) private APIs verwenden, aber Sie riskieren, dass Apple Ihre App ablehnt (oder schlimmer noch, sie wird später abgelehnt). – dfd

Antwort

7

Zuerst in Plist gesetzt View controller-based status bar appearance zu NO

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { 
    // Override point for customization after application launch. 

    let statusBar: UIView = UIApplication.shared.value(forKey: "statusBar") as! UIView 
    if statusBar.responds(to:#selector(setter: UIView.backgroundColor)) { 
     statusBar.backgroundColor = UIColor.blue 
    } 
    UIApplication.shared.statusBarStyle = .lightContent 

    return true 
} 

Der Ausgang Screenshot unterhalb

enter image description here

+2

Hierbei werden private, nicht dokumentierte APIs verwendet, die die App-Überprüfung möglicherweise nicht bestehen. Es ist nie eine gute Idee, solche Dinge zu tun. Es wird wahrscheinlich zum Absturz kommen, besonders wenn es geschrieben wird, wenn sich die private API in einem zukünftigen iOS-Update ändert. – rmaddy

+0

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 – byJeevan

+0

Ich würde diese Tatsache auf jeden Fall Ihrer Antwort hinzufügen **. – dfd

6

Nein, es ist nicht möglich, mit vorgefertigten öffentlichen APIs.

Aber mit der Veröffentlichung von iOS 7, bist du das Aussehen der Statusleiste ändern erlaubt. Daher poste ich hier meine Problemumgehung.

Von einem individuellen View-Controller durch die preferredStatusBarStyle überschrieben:

-(UIStatusBarStyle)preferredStatusBarStyle 
{ 
    return UIStatusBarStyleLightContent; 
} 

Alternativ können Sie die Statusleiste Stil unter Verwendung des UIApplication statusBarStyle Verfahren eingestellt. Fügen Sie dazu einen neuen Schlüssel mit dem Namen "Controller-basierte Statusleiste anzeigen" ein und legen Sie den Wert auf NO fest.

Durch Deaktivierung der Option "Controller-basierte Statusleiste anzeigen" können Sie den Statusleistenstil mithilfe des folgenden Codes festlegen.

[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent]; 

Am Ende die Farbe UINavigationBar Eigenschaft Farbton wie unter

[[UINavigationBar appearance] setBarTintColor:[UIColor blueColor]]; 
+0

Um Ihre Antwort zu klären, ändern Sie die Statusleiste ** Hintergrund ** Farbe in eine ** spezifische ** Farbe? – dfd

+0

Diese Änderung macht keinen Sinn. Das OP möchte die Statusleiste und nicht die Navigationsleiste ändern. – dfd

+0

Bitte beziehen Sie sich auf diesen Link http://www.appcoda.com/customi-navigation-status-bar-ios-7/ – byJeevan

3


Sie legen für Statusleiste Hintergrundfarbe beim Programmstart oder während viewDidLoad Ihrer View-Controller ändern.

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:

enter image description here

Hier ist Apple Guidelines/Instruction über Statusleiste ändern. Nur Dark & Licht (während & schwarz) sind in der Statusleiste erlaubt.

Hier ist - wie Statusleiste Stil zu ändern:

Wenn Sie Statusleiste Stil festlegen möchten, Anwendungsebene festgelegt dann UIViewControllerBasedStatusBarAppearance-NO in Ihrer `.plist‘ Datei.

wenn Sie wan Statusleiste Stil zu setzen, auf View-Controller-Ebene gehen Sie folgendermaßen vor:

  1. Stellen Sie die UIViewControllerBasedStatusBarAppearance-YES in der .plist Datei, wenn Sie brauchen, um Statusleiste Stil auf UIViewController Ebene gesetzt .
  2. In der viewDidLoad Funktion hinzufügen - setNeedsStatusBarAppearanceUpdate

  3. Überschreibung preferredStatusBarStyle in Ihrem View-Controller.

-

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

override var preferredStatusBarStyle: UIStatusBarStyle { 
    return .lightContent 
} 

Sollwert von .plist nach Statusleiste Stil Setup-Ebene. enter image description here

2

Hier ist meine Abhilfe: ein UIView erstellen, fügen Sie es zu Ihrer Stammansicht des View-Controller als künstliche Statusleiste Hintergrund
1.Erstellen ein UIView

// status bar's height is 20.0pt 
CGRect frame = CGRectMake(0.0, 0.0, [UIScreen mainScreen].bounds.size.width, 20.0); 
UIView *fakeStatusBarBG = [[UIView alloc] initWithFrame:frame]; 
fakeStatusBarBG.backgroundColor = [UIColor yourColor]; 

2.Add es Die Grundansicht Ihres View-Controllers

// self is your view controller, make sure fakeStatusBarBG is the top subview in your view hierarchy 
[self.view insertSubview:fakeStatusBarBG aboveSubview:yourTopSubview]; 

Dort gehen Sie.

3. (Zusatz) Ändern Sie die Inhaltsfarbe in der Statusleiste, nur weiß oder schwarz.

- (UIStatusBarStyle)preferredStatusBarStyle 
{ 
    if (youWantWhiteColor) 
    { 
     return UIStatusBarStyleLightContent; 
    } 
    return UIStatusBarStyleDefault; 
} 

Diese Problemumgehung verwendet keine private API, so dass Sie sicher. :-)

Verwandte Themen