IOS8 में स्विफ्ट का उपयोग करके विशिष्ट ViewControllers के लिए स्थिति बार रंग बदलना


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

किसी विशिष्ट Viewcontroller के लिए व्हाइट में स्टेटस कलर को व्हाइट में सेट करने के लिए किसी भी ViewController में उपरोक्त कोड का उपयोग करना मेरे लिए iOS8 में काम नहीं करता है । कोई सुझाव? UIApplication.saredApplication पद्धति का उपयोग करके, पूरे ऐप के लिए Info.plist में आवश्यक परिवर्तन के बाद रंग बदल जाता है।

// Change the colour of status bar from black to white
UIApplication.sharedApplication().statusBarStyle = .LightContent

मैं केवल कुछ आवश्यक और विशिष्ट ViewControllers के लिए स्थिति बार रंग में परिवर्तन कैसे कर सकता हूं ?

जवाबों:


349

सभी सुझावों को पढ़ने, और कुछ चीजों की कोशिश करने के बाद, मैं निम्नलिखित चरणों का उपयोग करके विशिष्ट व्यूह-रचनाकारों के लिए काम कर सकता हूं:

पहला कदम:

अपना info.plist खोलें और NO के लिए " नियंत्रक-आधारित स्थिति बार उपस्थिति " नाम की एक नई कुंजी डालें

दूसरा चरण (सिर्फ एक स्पष्टीकरण, इसे लागू करने की आवश्यकता नहीं):

आम तौर पर हम आवेदन में निम्नलिखित कोड डालते हैं (_: didFinishLaunchingWithOptions :) AppDelegate की विधि,

स्विफ्ट 2

UIApplication.sharedApplication().statusBarStyle = .LightContent

स्विफ्ट 3

UIApplication.shared.statusBarStyle = .lightContent

लेकिन यह सभी ViewControllers के प्रभाव को प्रभावित करता है statusBarStyle

तो, विशिष्ट ViewControllers के लिए यह काम कैसे प्राप्त करें - अंतिम चरण:

जहाँ आप बदलना चाहते हैं, वहां व्यू कॉन्ट्रॉलर फ़ाइल खोलें statusBarStyleऔर निम्नलिखित कोड डालें viewWillAppear(),

स्विफ्ट 2

UIApplication.sharedApplication().statusBarStyle = .LightContent

स्विफ्ट 3

UIApplication.shared.statusBarStyle = .lightContent

इसके अलावा, viewWillDisappear()उस विशिष्ट दृश्य नियंत्रक के लिए विधि को लागू करें और कोड की निम्नलिखित पंक्तियाँ डालें,

स्विफ्ट 2

override func viewWillDisappear(animated: Bool) {
    super.viewWillDisappear(animated)
    UIApplication.sharedApplication().statusBarStyle = UIStatusBarStyle.Default

}

स्विफ्ट 3

override func viewWillDisappear(_ animated: Bool) {
    super.viewWillDisappear(animated)
    UIApplication.shared.statusBarStyle = UIStatusBarStyle.default
}

यह कदम सबसे पहले statusBarStyleविशिष्ट दृश्य-नियंत्रक के लिए बदल जाएगा और फिर इसे तब बदल देगा defaultजब विशिष्ट दृश्य-नियंत्रक गायब हो जाएगा। लागू नहीं करने से स्थायी रूप से नए परिभाषित मूल्य में viewWillDisappear()परिवर्तन होगाstatusBarStyleUIStatusBarStyle.LightContent


4
ध्यान दें कि यदि आप Status bar is initially hidden = YESinfo.plist फ़ाइल में सेट करते हैं , तो "नियंत्रक-आधारित स्थिति बार उपस्थिति = NO" देखें, जिससे स्थिति पट्टी छिपी हो जाएगी।
xi.lin

13
यदि आप वापस UIStatusBarStyle.Defaultउपयोग करने के लिए बदल रहे हैं viewWillDisappear(), तो आपको viewWillAppear()इसे इनिशियलाइज़ करने के लिए उपयोग करना चाहिए , बजाय viewDidLoad().... अन्यथा यदि आप उस दृश्य पर वापस आए बिना इसे फिर से लोड किए बिना, तो आप देखेंगे कि StatusBarStyleआप अपेक्षा नहीं कर रहे हैं।
विलियम जीपी

7
स्विफ्ट 3 के लिए: UIApplication.shared.statusBarStyle = .lightContent
ibrahimyilmaz

4
यह अभी भी स्पष्ट नहीं है कि आप स्टेटस बार का रंग कैसे बदलते हैं
DoruChidean

4
दोस्तों, आईओएस 9 से इसका डेप्रिसिएशन
बाईजीवन

109

(20 सितंबर, 2019 तक)

स्विफ्ट 5 , स्विफ्ट 4.2 , स्विफ्ट 4

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    setNeedsStatusBarAppearanceUpdate()
}
override var preferredStatusBarStyle: UIStatusBarStyle {
    .lightContent
}

7
super.viewWillAppearयदि आप इस कोड को कॉपी और पेस्ट कर रहे हैं तो कॉल करना सुनिश्चित करें
स्टीफन सिल्बर

शामिल करने के लिए संपादित super.viewWillAppear ()। धन्यवाद @StephenSilber टिप के लिए!
BennTheNerd

आपको पसंदीदास्टैटस स्टाइल को ओवरराइड करना होगा या यह काम नहीं करेगा। यह बात बताने के लिए धन्यवाद। +1
एलिक्स

3
UIApplication.shared.statusBarStyle = .lightContentइस संकलक चेतावनी के परिणामों का उपयोग करना : 'स्टेटसबर्टल' के लिए सेटर को आईओएस 9.0 में
अपदस्थ

3
आपके आवेदन के Info.plist में, "कंट्रोलर-आधारित स्टेटस बार उपस्थिति" को YES
IvanPavliuk

29

मैंने इस ट्यूटोरियल का अनुसरण किया और इसने मेरे लिए काम किया। हालांकि, मुझे यकीन नहीं है कि कोई चेतावनी है।

https://coderwall.com/p/dyqrfa/customize-navigation-bar-appearance-with-swift

  • अपनी info.plist खोलें और सेट UIViewControllerBasedStatusBarAppearanceकरें false
  • पहले फ़ंक्शन में AppDelegate.swift, जिसमें सम्‍मिलित है didFinishLaunchingWithOptions, इच्छित रंग सेट करें।

UIApplication.sharedApplication().statusBarStyle = UIStatusBarStyle.LightContent

  • स्विफ्ट 3 अपडेट *

    UIApplication.saring.statusBarStyle = .लाइटकंटेंट


11
यह कैसे प्रत्येक दृश्य नियंत्रक के लिए विशिष्ट है
यारो

4
वास्तव में, यह संपूर्ण ऐप के लिए है, और यह सवाल नहीं है।
अनुज

3
मैं iOS 8 Swift और xCode 6.1.1 का उपयोग कर रहा हूं और इन दो चरणों का पालन करने से काम नहीं चलता है। आपको UIApplication.sharedApplication().statusBarHidden = falseAppDelegate.swift didFinishLauchingWithOptions में भी जोड़ने की जरूरत है
अहमद अमीन

इसने इसे पूरे एप्लिकेशन के लिए सेट कर दिया। विशिष्ट दृश्य नियंत्रकों के लिए, पहला उत्तर देखें। इसने मेरे लिए काम किया।
अक्षर पटेल

आईओएस 9.0 में 'स्टेटसबर्टल' के लिए सेटर को पदावनत किया गया: उपयोग - [UIViewController वरीयस्टैटसबर्टल्टी]
ओलेस्कैंडर

29

नैविगेशनकंट्रोलर के साथ स्विफ्ट 4.2 का समाधान

पहला कदम:

अपनी info.plist खोलें और प्रत्येक नियंत्रकUIViewControllerBasedStatusBarAppearance को अपनी स्वयं की स्थिति संपत्ति का उपयोग करने देने के लिए " कंट्रोलर-आधारित स्थिति बार उपस्थिति " या YES नामक एक नई कुंजी डालें ।

दूसरा कदम

प्रत्येक वीसी में, इस तरह से पसंदीदास्टैटसबर्टल प्रॉपर्टी को ओवरराइड करें:

override var preferredStatusBarStyle : UIStatusBarStyle {
    return .lightContent //.default for black style
}

अंतिम चरण

अपने कस्टम नेविगेशनकंट्रोलर वर्ग में पसंदीदास्टैटबर्टल प्रॉपर्टी को ओवरराइड करें :

class NavigationController : UINavigationController {

override var preferredStatusBarStyle : UIStatusBarStyle {

    if let topVC = viewControllers.last {
        //return the status property of each VC, look at step 2
        return topVC.preferredStatusBarStyle  
    }

    return .default
}

यह केवल तरीका है कि नेविगेशन नियंत्रक और अपने स्वयं के नियंत्रकों का उपयोग करके अपेक्षित परिणाम कैसे प्राप्त करें। इसके अलावा, आप के रूप में मैं अपने प्रोजेक्ट के लिए :) किया prefersStatusBarHidden के लिए इस तरह से कर सकता है
atereshkov

22

यहाँ एक बिलियन उत्तर है इसलिए मैंने सोचा कि क्यों न एक एक्सटेंशन के रूप में दूसरा जोड़ा जाए (@ Cœur की मदद से)

स्विफ्ट 3

एक्सटेंशन:

extension UIApplication {
    class var statusBarBackgroundColor: UIColor? {
        get {
            return (shared.value(forKey: "statusBar") as? UIView)?.backgroundColor
        } set {
            (shared.value(forKey: "statusBar") as? UIView)?.backgroundColor = newValue
        }
    }
}

कार्यान्वयन:

UIApplication.statusBarBackgroundColor = .blue

2
कृपया ध्यान दें कि इस दृष्टिकोण को एक निजी एपीआई तक पहुंच माना जा सकता है, और इसका मतलब यह हो सकता है कि आपका ऐप्पल ऐप द्वारा अस्वीकार कर दिया जाएगा।
JWhitey

या कम से कम यह एप्पल के कार्यान्वयन विवरणों पर निर्भर है और iOS में बदलाव के साथ चेतावनी के बिना टूट सकता है।
क्रिस प्रिंस

19

अपने Info.plist में आपको किसी भी मान के लिए नियंत्रक-आधारित स्थिति बार उपस्थिति को परिभाषित करने की आवश्यकता है।

यदि आप इसे YES परिभाषित करते हैं तो आपको प्रत्येक दृश्य नियंत्रक में पसंदीदास्टैटबर्टल फ़ंक्शन को ओवरराइड करना चाहिए।

यदि आप इसे NO परिभाषित करते हैं तो आप AppDelegate में शैली का उपयोग कर सेट कर सकते हैं

UIApplication.sharedApplication().setStatusBarStyle(UIStatusBarStyle.LightContent, animated: true)

7
setStatusBarStyleआईओएस 9.0
जेफरी नियो

@Jeffrey_Neo हालांकि यह सच है कि मुझे काम करने के लिए प्रतिस्थापन नहीं मिल सकता है। काम कोड के साथ आपकी टिप्पणी को उत्तर के रूप में देखना उपयोगी होगा।
डंबलड

15
override func viewWillAppear(animated: Bool) {
    self.navigationController?.navigationBarHidden =  true

    UIApplication.sharedApplication().statusBarHidden = false
    UIApplication.sharedApplication().statusBarStyle = .LightContent

    let statusBar: UIView = UIApplication.sharedApplication().valueForKey("statusBar") as! UIView
    if statusBar.respondsToSelector("setBackgroundColor:") {
        statusBar.backgroundColor = UIColor.redColor()
    }

}

का उपयोग valueForKey("statusBar")करना Apple के दिशानिर्देशों के अनुरूप नहीं हो सकता है
C Marur

15

स्विफ्ट 3

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

यह विशिष्ट दृश्य नियंत्रक के लिए स्थिति पट्टी की पृष्ठभूमि का रंग निर्धारित करने के लिए समाधान है।


3
UIView हमेशा स्विफ्ट में बैकग्राउंड कलर का जवाब देता है।
œ --œœ

13

स्विफ्ट 2

मैं अपने दृश्य में निम्नलिखित जोड़कर स्थिति बार पृष्ठभूमि की उपस्थिति को सफलतापूर्वक बदलने में सक्षम था:

let statusBar: UIView = UIApplication.sharedApplication().valueForKey("statusBar") as! UIView

    if statusBar.respondsToSelector(Selector("setBackgroundColor:")) {
        statusBar.backgroundColor = .redColor()
    }

10

लागू preferredStatusBarStyleके रूप में आप का उल्लेख किया और कॉल self.setNeedsStatusBarAppearanceUpdate()में ViewDidLoadऔर भी Info.plist सेट में UIViewControllerBasedStatusBarAppearanceकरने के लिए YES(यह YESडिफ़ॉल्ट रूप से)

यह स्पष्ट नहीं है कि यह क्यों काम नहीं कर रहा है। मुझे कोड की जांच करने की आवश्यकता है। एक अन्य सुझाव काम करने वाले कोड के साथ जाता है viewDidLoad UIApplication.sharedApplication().statusBarStyle = .LightContentऔर जब आप गायब हो जाते हैं तो इसे डिफ़ॉल्ट में बदल दें viewWillDisappear


बस जवाब के पहले भाग को लागू करना, मेरे लिए काम किया। हालाँकि, मैंने Info.plist में UIViewcontrollerBasedStatusBarAppearance नहीं जोड़ा। यह अभी भी काम किया।
अक्षर पटेल

10

स्विफ्ट 3 के लिए

.plist

View controller-based status bar appearance = NO

AppDelegate.swift

  func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
        // Custom statubar
        UIApplication.shared.isStatusBarHidden = false
        UIApplication.shared.statusBarStyle = .lightContent
        let statusBar: UIView = UIApplication.shared.value(forKey: "statusBar") as! UIView
        statusBar.backgroundColor = UIColor.gray

        return true
    }

1
मैंने सभी समाधानों की कोशिश की ... यह केवल मेरे लिए काम किया !! मुझे पता नहीं क्यों: D
खालिद हायेक

ड्रा का भाग्य
Giang

'IsStatusBarHidden' के सेटर को iOS 9.0 में अपदस्थ किया गया था: उपयोग - [UIViewController prefersStatusBarHidden] ...
आकर्षित किया ..

9

मेरी स्थिति में, मैं अपने दृश्य नियंत्रकों को व्यवस्थित करने के लिए स्टोरीबोर्ड का उपयोग करता हूं। मैं सभी स्थिति बार शैली को बदलना चाहता हूं।

आप नीचे चित्र में देख सकते हैं।

यहां छवि विवरण दर्ज करें

Starsदेखें नियंत्रक एक है CPBaseNavigationController, और CPBaseNavigationControllerउप-वर्ग है UINavigationController

मैं अगले सेट्स करने की कोशिश करता हूं:

  1. में AppDelegate.swiftसमारोह didFinishLaunchingWithOptions, जोड़ने

    //change status bar color
    UIApplication.sharedApplication().statusBarHidden = false
    UIApplication.sharedApplication().statusBarStyle = .LightContent

    लेकिन कोई असर नहीं हुआ।

  2. StoryBoard में, Base Tab BarController(ऊपर का चित्र) खोजें .select Attributes Inspector, .so के लिए Sattus Barविशेषता को बदलें Light Content, कोई प्रभाव नहीं।

यहां छवि विवरण दर्ज करें

  1. अंतिम मैं इसे प्राप्त करता हूं। मेरे कस्टम नेविगेशन नियंत्रक में CPBaseNavigationController, func जोड़ेंpreferredStatusBarStyle

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

    यह अच्छा काम करता है!

इसके अलावा, statusBarStyle9.0 में पदावनत, आप उपयोग कर सकते हैं -[UIViewController preferredStatusBarStyle]


9

नेविगेशन आधारित अनुप्रयोग के लिए काम करता है

    var addStatusBar = UIView()
    addStatusBar.frame = CGRectMake(0, 0, UIScreen.mainScreen().bounds.width, 20);
    addStatusBar.backgroundColor = global().UIColorFromRGB(0x65b4d9)
    self.window?.rootViewController?.view .addSubview(addStatusBar)

इस विशिष्ट कोड को जोड़ने के लिए, बस काम करने के लिए इसे प्राप्त नहीं किया जा सकता है।
अनुज

यू इसे app प्रतिनिधि फ़ाइल में जोड़ सकते हैं doFinishLaunchingWithOptions
Jio

1
क्या हार्ड कोडित 320 चौड़ाई के बजाय addStatusBar.frame = CGRectMake (0, 0, UIScreen.mainScreen ()। सीमा, उपलब्धता, 20) का उपयोग करना बेहतर नहीं होगा?
टॉरस्टेन ओजापर्व

संपादित @TorstenOjaperv
Jio

इसे स्विफ्ट 3.0 के साथ कैसे करें?
येटी

8

Swift 3.0 Xcode 8 में सब कुछ बहुत आसान है

App प्रतिनिधि फ़ाइल में नीचे दिए गए कोड का उपयोग करने के बाद

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {

इसे डालें:

UINavigationBar.appearance().barStyle = .black

UINavigationBar.appearance().barTintColor = UIColor(red: 230, green: 32, blue: 31, alpha: 1.0)

1
लाल, हरे और नीले रंग के मान 0 से 1 तक हैं। आपको उन्हें 255 से विभाजित करना होगा या यह काम नहीं करेगा।
मकाले

8

स्विफ्ट 3

//
//  LoginController.swift
//  Swift 3
//
//  Created by The Crab on 17/01/2017.
//  Copyright © 2017 Paxi Labs. All rights reserved.
//

import UIKit

class LoginController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        setNeedsStatusBarAppearanceUpdate()

        view.backgroundColor = UIColor(red: 61/255, green: 91/255, blue: 151/255, alpha: 1)

    }

    override var preferredStatusBarStyle: UIStatusBarStyle {
        return .lightContent
    }
}

7

स्विफ्ट 4 नेविगेशन व्यू कॉन्ट्रोलर के बिना विशिष्ट ViewController के लिए एम्बेडेड बस इसे अपने ViewController फ़ाइल में जोड़ें।

override var preferredStatusBarStyle : UIStatusBarStyle {
    return .lightContent
}

अगर हमारे पास एक नेविगेशन नियंत्रक है तो आप क्या करते हैं?
आइसकोमो

7

इस काम को करने का एक और वास्तव में आसान तरीका सिर्फ UINavigationController क्लास का एक्सटेंशन बनाना है।

चूंकि अधिभावी preferredStatusBarStyle:विधि अभ्यस्त काम जब तक हम UINavigationController वर्ग के अंदर यह करना।

    extension UINavigationController {
        open override var preferredStatusBarStyle: UIStatusBarStyle {
            return .lightContent
        }
    }

4

मैंने App Delegateफ़ाइल में नीचे कोड का उपयोग करके विशिष्ट रंग (RGB प्रारूप में) निर्धारित किया था :

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
. . .

 UIApplication.sharedApplication().statusBarHidden = false
        UIApplication.sharedApplication().statusBarStyle = .LightContent

        let statusBar: UIView = UIApplication.sharedApplication().valueForKey("statusBar") as! UIView
        if statusBar.respondsToSelector(Selector("setBackgroundColor:")) {
            statusBar.backgroundColor = UIColor.init(red: 0.1, green: 0.27, blue: 0.60, alpha: 1.0)
        }

. . .
}

आपको Info.plistफ़ाइल में नीचे की कुंजी भी डालनी होगी :

बूलियन मान के साथ नियंत्रक-आधारित स्थिति बार उपस्थिति को NO पर सेट करें

स्क्रीनशॉट 1

स्क्रीनशॉट 2


Siwft 3.0 के साथ, यह कैसे करना है?
येटी

4

मैं आपको एक सरल तरीका सुझा सकता हूं,

  1. बस फोन setNeedsStatusBarAppearanceUpdate viewDidLoad में एप्पल डॉक्स कहते हैं,

इस कंट्रोलर को कॉल करें यदि व्यू कंट्रोलर की स्टेटस बार विशेषताएँ, जैसे छिपी / अनहोनी स्थिति या शैली, परिवर्तन। यदि आप इस विधि को एनीमेशन ब्लॉक के भीतर कहते हैं, तो बाकी एनीमेशन ब्लॉक के साथ परिवर्तन भी एनिमेटेड हैं।

  1. लागू preferredStatusBarStyle अपने पसंदीदा प्रकार लौटने।

इसने मेरे लिए iOS 10.1 में काम किया।

उद्देश्य सी

[self setNeedsStatusBarAppearanceUpdate];

-(UIStatusBarStyle)preferredStatusBarStyle {
     return UIStatusBarStyleLightContent;
}

तीव्र

setNeedsStatusBarAppearanceUpdate()

var preferredStatusBarStyle: UIStatusBarStyle { 
    return .lightContent
}

मुझे आश्चर्य है कि किसी ने इस ओर इशारा नहीं किया। वैसे भी :)


4

मुझे इससे थोड़ी परेशानी हुई। मैं वास्तव में विश्व स्तर पर बार में रंग बदलने के बारे में अच्छा महसूस नहीं किया था, यह देखने में दिखाई दिया था और फिर इसे वापस देखने पर इसे स्वीकार किए गए उत्तर की तरह गायब हो गया। मानो या न मानो, आप preferredStatusBarStyleअपने इच्छित दृश्य नियंत्रक पर ओवरराइड करके यह काम कर सकते हैं । बहुत समय के बाद मैंने इसे काम करने के लिए किया:

  1. अपने info.plistहाँ में कंट्रोलर-आधारित स्थिति बार उपस्थिति बदलें ।
  2. अब कोई भी फुल स्क्रीन व्यू कंट्रोलर ओवरराइड करके स्टेटस बार स्टाइल को बदल सकता है preferredStatusBarStyle
  3. मैं पूर्ण स्क्रीन निर्दिष्ट करता हूं क्योंकि यह (गैर-पूर्ण स्क्रीन) मोडल व्यू नियंत्रकों के लिए काम नहीं करेगा, modal​Presentation​Captures​Status​Bar​Appearanceहां के लिए सेटिंग के बिना नहीं ।
  4. यदि आपके पास एम्बेडेड कंट्रोलर हैं, उदाहरण के लिए नेविगेशन कंट्रोलर की तरह, यह स्टेटस बार स्टाइल के लिए टॉप मोस्ट व्यू कंट्रोलर से पूछेगा। child​View​Controller​For​Status​Bar​Styleएम्बेडेड दृश्य नियंत्रक को ओवरराइड करना और पास करना काम करना है, लेकिन यह मेरे लिए नहीं था। इसलिए मैंने अभी-अभी एम्बेड किए गए दृश्य नियंत्रकों को पसंदीदा स्थिति बार शैली के रूप में पसंदीदा स्थिति बार लौटाया है। कुछ इस तरह:

    override var preferredStatusBarStyle: UIStatusBarStyle {
         if let topViewController = viewControllers.last {
             return topViewController.preferredStatusBarStyle
         }
    
         return .default
    }

इस जवाब से मुझे मदद मिली! मैंने पाया कि किसी कारण से मेरे नेविगेशन कंट्रोलर (सामान्य रूप से प्रस्तुत किए जा रहे हैं) को अपनी स्थिति पट्टी शैली के लिए शीर्ष-सर्वाधिक दृश्य नियंत्रक नहीं कहा गया था । तो मुझे उप-वर्ग में जाना पड़ा UINavigationControllerऔर वहां के संस्करण को ओवरराइड करके child​View​Controller​For​Status​Bar​Styleलौटना पड़ा self.topViewController
टेबर

3

स्विफ्ट 4 या 4.2 में

आप अपने vc पर जोड़ सकते हैं

preferredStatusBarStyle

और वापसी मान सेट करें

.Content या .default

उदाहरण के लिए:

override var preferredStatusBarStyle: UIStatusBarStyle {
        return .lightContent
}

3

(10 जून, 2020 तक)

स्विफ्ट 5 ( संपादन .Plistफ़ाइल के बिना )

आप उपयोग कर रहे हैं Storyboard, के लिए जाना NavigationController, चयन navigationBar, पर क्लिक करें Attributes Inspector, फिर बदल style। अगर आपको ज़रूरत है light content( व्हाइट स्टेटस बार ) तो इसे defaultसेट स्टाइल के अलावा कुछ भी सेट करने दें blackऔर अगर आप चाहें dark content ( ब्लैक स्टेटस बार ) इसे सेट करें default

डिफ़ॉल्ट ( UIBarStyleDefault) अंधेरे अग्रभूमि UIStatusBarStyleDefaultस्थिति बार में परिणाम देता है। और UIBarStyleBlackएक दे देंगे UIStatusBarStyleLightContentस्थिति पट्टी।

प्रोग्राम के

let nav = UINavigationController(rootViewController: rootViewController)

    nav.navigationBar.barStyle = .default //gives you dark Content status bar

    nav.navigationBar.barStyle = .black  //gives you light content status bar

नेविगेशन बार के बिना ( संपादित करें.Plist )

जोड़ें UIViewControllerBasedStatusBarAppearance/ View controller-based status bar appearanceअपने info.plist, और निर्धारित मान है true

OverridepreferredStatusBarStyleअपने नियंत्रक में संपत्ति

class ViewController: UIViewController {
    override var preferredStatusBarStyle : UIStatusBarStyle {
        return .lightContent
    }
}

2

स्विफ्ट 3.0 अपडेट

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {

        UIApplication.shared.statusBarStyle = .lightContent

        return true
    }

2

मेरे साथ क्या काम किया, स्टोरीबोर्ड में, नेविगेशन नियंत्रक पर जाएं, नेविगेशन बार का चयन करें, गुण निरीक्षक पर क्लिक करें, फिर शैली को डिफ़ॉल्ट से काले रंग में बदलें। बस!


2

स्विफ्ट 4.2 हे, मैं एक समाधान साझा करना चाहता था, जो मेरे लिए काम करता था कि मुझे ग्रिग ग्रुमिट द्वारा इस गूढ़ विषय पर एक शानदार लेख मिला।

चरण 1 जैसा कि अन्य ने आपके PLIST के नीचे ADD का उल्लेख किया है

View controller-based status bar appearance YES

RootViewcontroller में चरण 2 नीचे जोड़ें

var statusBarHidden: Bool = false {
        didSet(newValue) {
            UIView.animate(withDuration: 0.1) {
                self.setNeedsStatusBarAppearanceUpdate()
            }
        }
    }

    override var prefersStatusBarHidden: Bool {
        return statusBarHidden
    }

    var vcStatusBarStyle: UIStatusBarStyle = .default {
        didSet(newValue) {
            UIView.animate(withDuration: 0.1) {
                self.setNeedsStatusBarAppearanceUpdate()
            }
        }
    }

    override var preferredStatusBarStyle: UIStatusBarStyle {
        return vcStatusbarStyle
    }

प्रॉपर्टी को अपडेट करते समय statusBarHiddenया vcStatusBarStyleयह कॉल करेगा setNeedsStatusBarAppearanceUpdate()और स्टेटस बार को prefersStatusBarHiddenया तो नए मानों के साथ अपडेट करेगा preferredStatusBarStyle। मेरी स्थिति में मुझे कंटेनर व्यूकंट्रोलर के लिए इन गुणों को अपडेट करना था, जो कि दृश्यमान चाइल्डव्यूकंट्रोलर के माता-पिता थे। मैंने एक साधारण प्रतिनिधि विधि का उपयोग करके ऐसा किया।

protocol MainViewControllerDelegate {
    func updateStatusBarStyle(statBarStayle: UIStatusBarStyle)
    func toggleStatusBar(visable: Bool)
}

चाइल्ड व्यू कॉन्ट्रोलर (विजिबल वीसी) को इंस्टेंट करते समय जब भी मेनवेटकंट्रोलर (कंटेनर वीसी) को उसके प्रतिनिधि के रूप में सेट करना न भूलें। मैं कभी-कभी करता हूं। :)

childViewController.delegate = self

फिर चाइल्ड व्यू कॉन्ट्रोलर में मैंने स्टेटस बार को अपडेट करने के लिए जरूरत पड़ने पर डेलिगेट पद्धति को कॉल किया।

self.delegate?.updateStatusBarStyle(statBarStayle: .default)

जैसा कि ग्रेग ग्रुमिट के ऊपर उल्लेख किया गया है, इस समाधान के बारे में अधिक विस्तार से और साथ ही साथ यूनावीगेशन कॉन्ट्रोलर्स के साथ भी काम कर रहा है। यहां लिंक: स्टेटस बार का रहस्यमय मामला


1

सहायक फ़ाइल समूह (बाईं ओर शीर्ष - आपकी परियोजना का नाम) पर क्लिक करें। जानकारी पर नेविगेट करें। सूची के बीच कहीं + पर क्लिक करें, जैसे नीचे बंडल नाम। और "नियंत्रक-आधारित स्थिति बार दिखावे" जोड़ें और इसे NO पर सेट करें। फिर AppDelegate.swift खोलें और इस तरह से संशोधित करें:

func application(application: UIApplication!, didFinishLaunchingWithOptions launchOptions: NSDictionary!) -> Bool {

UIApplication.sharedApplication().setStatusBarStyle(UIStatusBarStyle.LightContent, animated: true)

return true
}

बस।


आपने प्रश्न गलत पढ़ा। मैंने विशिष्ट अनुप्रयोग के लिए विशिष्ट दृश्य नियंत्रक के लिए StatusBarStyle को कैसे बदला जाए, इसके बारे में पूछा।
अनुज

मेरे उत्तर की जाँच नीचे @Anuj
theCrab

1

Xcode 10 के लिए आप एक क्लास बना सकते हैं और इसे अपने viewController क्लास से पहले रख सकते हैं, आप इस क्लास को सभी व्यू कंट्रोलर में कॉल कर सकते हैं एक लाइट कंटेंट स्टेटस बार की जरूरत है ...

class UIViewControllerWithLightStatusBar: UIViewController {
override var preferredStatusBarStyle: UIStatusBarStyle {
return UIStatusBarStyle.lightContent
}
}

अब अपना दृश्य परिवर्तन करें:

class YourViewController: UIViewControllerWithLightStatusBar {
...
}

और बस यही...


1

स्विफ्ट 4 में विशेष दृश्य नियंत्रक के लिए नेविगेशन के लिए काम करता है

   let app = UIApplication.shared
   let statusBarHeight: CGFloat = app.statusBarFrame.size.height

   let statusbarView = UIView(frame: CGRect(x: 0, y: 0, width: UIScreen.main.bounds.size.width, height: statusBarHeight))
   statusbarView.backgroundColor = UIColor.red
   view.addSubview(statusbarView)

1

चेतावनी


आईओएस 9.0 में 'स्टेटसबर्टल' के लिए सेटर को हटा दिया गया था: उपयोग - [यूआईवाईवीकंट्रोलर पसंदीदास्टैटसबर्टल]

UIApplication.shared.statusBarStyle = .default

तो मेरा समाधान इस प्रकार था: नेविगेशन नियंत्रक से एक विस्तार करना:

extension UINavigationController {
    open override var preferredStatusBarStyle: UIStatusBarStyle {
        if let topViewController = presentedViewController{
            return topViewController.preferredStatusBarStyle
        }
        if let topViewController = viewControllers.last {
            return topViewController.preferredStatusBarStyle
        }

        return .default
    }
}

और यदि आपके पास एक व्यू-कंट्रोलर है, जिसमें ऐप की शैली की तुलना में एक और शैली होगी, तो आप इसे बना सकते हैं

var barStyle = UIStatusBarStyle.lightContent
override var preferredStatusBarStyle: UIStatusBarStyle{
    return barStyle
}

मान लें कि आप एप्लिकेशन स्थिति शैली है .defaultऔर आप चाहते हैं कि यह स्क्रीन .lightContent इतनी बारसेल हो जाए .lightContentकि डिफ़ॉल्ट मान के रूप में ले जाए , इससे स्थिति बार शैली को लाइटकॉन्टेंट में बदल जाएगा, और तब सुनिश्चित करें जब viewWillDisappearबार स्टाइल को ऐप बॉक्स बार शैली में बदल दें। हमारे मामले में जो है .default

यह मेरे लिए काम करता है


1

स्थिति पट्टी के लिए कस्टम रंग (iOS11 +, Swift4 +)

यदि आप एक समाधान की तलाश कर रहे हैं कि स्थिति बार को अपने कस्टम रंग में कैसे बदला जाए, तो यह कार्यशील समाधान है।

let statusBarView = UIView()
view.addSubview(statusBarView)
statusBarView.translatesAutoresizingMaskIntoConstraints = false
NSLayoutConstraint.activate([
    statusBarView.topAnchor.constraint(equalTo: view.topAnchor),
    statusBarView.leftAnchor.constraint(equalTo: view.leftAnchor),
    statusBarView.rightAnchor.constraint(equalTo: view.rightAnchor),
    statusBarView.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor)
])
statusBarView.backgroundColor = .blue
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.