UIStatusBarStyle स्विफ्ट में काम नहीं कर रहा है


85

मैं अपने स्विफ्ट ऐप में स्टेटस बार के रंग को सफेद में बदलने की कोशिश कर रहा हूं, लेकिन ईंट की दीवार से टकरा रहा हूं। मेरे पास 3 ViewControllers हैं जो प्रत्येक में एक NavigationController हैं (जो कि समस्या हो सकती है! मैंने पहले ही इस कोड को नेविगेशनकंट्रोलर वर्ग में रखने की कोशिश की है।) मैंने अपने AppDelegate के didFinishaaunchingWithOptions में कोड के निम्नलिखित दोनों टुकड़ों की कोशिश की है। .swift फ़ाइल लेकिन काम नहीं किया।

application.statusBarStyle = .LightContent

तथा

UIApplication.sharedApplication().statusBarStyle = .LightContent

डॉक्स के बारे में यह सब कहना है कि UIBarButtonStyle एक Int है और मुझे यह एनम स्निपेट दिया जिसने मुझे इम्प्लांटेशन में बिल्कुल भी मदद नहीं की।

enum UIStatusBarStyle : Int {
    case Default
    case LightContent
    case BlackOpaque
}

मैं क्या खो रहा हूँ?

जवाबों:


145

आपके पास दो विकल्प हैं।

यदि आप मैन्युअल रूप से स्टेटस बार की शैली सेट करना जारी रखना चाहते हैं, तो वही करें जो आप कर रहे हैं, लेकिन जारी रखें, लेकिन आपको अपनी जानकारी के लिए निम्न कुंजी को जोड़ना होगा NO। मान के साथ फाइल करें ।

नियंत्रक-आधारित स्थिति बार उपस्थिति देखें

या, यदि आप एप्लिकेशन की स्थिति सेट करने के बजाय व्यू कंट्रोलर आधारित स्टेटस बार उपस्थिति का उपयोग जारी रखना चाहते हैं, तो preferredStatusBarStyleप्रत्येक व्यू कंट्रोलर में उस संपत्ति को ओवरराइड करें जिसके लिए आप स्टेटस बार शैली निर्दिष्ट करना चाहते हैं।

स्विफ्ट 3

override var preferredStatusBarStyle: UIStatusBarStyle {
    return .lightContent
}

स्विफ्ट 2

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

मैंने इस कोड की कोशिश की है ... लेकिन मुझे केवल पहली स्क्रीन में सफेद स्थिति पट्टी मिलती है .. मुझे बाकी स्क्रीन के लिए स्थिति पट्टी नहीं मिल रही है :( .. कोई मदद?
राहुल

7
आपको अपने plist में YES को "कंट्रोलर आधारित स्टेटस बार उपस्थिति" सेट करना होगा।
स्टैकउंडरफ्लो

1
केवल तभी यदि आप एक दृश्य नियंत्रक आधारित स्थिति पट्टी उपस्थिति का उपयोग करना चाहते हैं
सैम होम्स

4
आईओएस 10 (स्विफ्ट 3.0) में अब इसका कोई तरीका नहीं बल्कि संपत्ति है। देखें: stackoverflow.com/questions/38862208/…
stevo.mit 12

सिर्फ एक स्क्रीन के लिए
Oubaida AlQuraan

143

स्विफ्ट 3.0

में AppDelegate.swift didFinishLaunchingWithOptions

UIApplication.shared.statusBarStyle = .lightContent

Info.plist

View controller-based status bar appearance -> NO

स्विफ्ट 2.2

में AppDelegate.swift didFinishLaunchingWithOptions

UIApplication.sharedApplication().statusBarStyle = .LightContent

Info.plist

View controller-based status bar appearance -> NO

1
इसका सही उत्तर है :)
Jay Mayu

1
एकदम सही जवाब। छोटा एवं सुन्दर।
मेहुल

3
क्षमा करें, यह सबसे सरल उत्तर हो सकता है, लेकिन यह निश्चित रूप से सबसे अच्छा नहीं है: क्योंकि यह सिर्फ इस एक शैली को सभी और किसी भी व्यू-कंट्रोलर को ऐप में सेट करता है। व्यवहार को बेहतर नियंत्रण और विभिन्न दृश्य नियंत्रकों (जैसे प्रकाश और अंधेरे सामग्री को मिलाकर) के आधार पर विभिन्न सेटिंग्स लागू करने के लिए पेश किया गया है।
औरो

यह विचित्र है - Apple डॉक्स जो नहीं कहता है, लेकिन यह काम करता है। UIViewController आधारित स्थिति पट्टी सहित अन्य तरीकों के एक समूह की कोशिश की, उनमें से कोई भी काम नहीं किया।
n13

33

आपको सेट करना होगा:

navigationController.navigationBar.barStyle = .black

और पाठ सफेद रंग में दिखाई देगा


1
धन्यवाद! कुछ भी नहीं preferredStatusBarStyle () समारोह भी इस ओवरराइड मदद की थी -> UIStatusBarStyle {वापसी UIStatusBarStyle.LightContent} यह वास्तव में मदद करता है: navigationController.navigationBar.barStyle = .BlackTranslucent navigationController.navigationBar.translucent = सच
श्वेतलाना

धन्यवाद! आपने मेरा दिन बचाया। हालाँकि, BlackTranslucent को हटा दिया गया है। इसलिए, मैंने नैविगेशनकंट्रोलर.नेवीगेशन
बबर.बारसाल

यह पूरी तरह से साथ काम कर रहा है override var preferredStatusBarStyle: UIStatusBarStyle { return .lightContent }। आपको इस लाइन को viewDidLoadअच्छे से लिखने के लिए लिखना होगा । सुनिश्चित करें कि View controller-based status bar appearance = YESइस समाधान के साथ रखें ।
Bhavin_m

एक overkill की तरह लगता है ... बस इसे आज़माया और Info.plist फ़ाइल में इस तरह से काम किया: 1. स्टेटस बार स्टाइल -> UIStatusBarStyleLightContent 2. कंट्रोलर-आधारित स्टेटस बार उपस्थिति -> NO
raistel

21

IOS9.x और Xcode7 के लिए, बस इसे अंदर डालें AppDelegate.swift:

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

    UINavigationBar.appearance().barStyle = .Black

} 

यह .LightcontentUINavigationController के अंदर सभी दृश्य नियंत्रकों के लिए स्वचालित रूप से आपकी स्थिति बार की शैली को बदल देगा ।

(इसके अलावा, View controller-based status bar appearanceआप जो चेतावनी देख रहे हैं उसे दबाने के लिए Info.plist से हटाएं !)


धन्यवाद। IOS9 में एक गंभीर बग प्रतीत होता है। यह एकमात्र तरीका था जिससे मैं शुरुआती वीसी व्हाइट में स्टेटस बार चालू कर सकता था। मैंने सब कुछ आजमाया। मैं एक राडार दर्ज करूंगा।
1b0t

पसंदीदास्टैटसबर्टल यूआईटैट्ससबर्सेल्टीडाल्ट लौटाता है, लेकिन लाइटकॉन्टेंट को डार्ककंटेंट के लिए विशेष व्यूकंट्रोलर में अपडेट नहीं कर रहा है। सेल्फ.नैविगेशनकंट्रोलर के बाद। एनएवीगेशनबर्ल। स्टारसेल = यूआईबीआरसीएलडिफॉल्ट; देखने में मेरे लिए काम किया। आशा है कि यह टिप्पणी दूसरों की मदद करेगी।
पाण्डेय_लक्ष्मण

ध्यान दें कि स्विफ्ट 3 में UIStatusBarStyle को ".black" (लोअरकेस B) में बदल दिया गया है
brycejl

16

स्विफ्ट 3 में, स्थिति बार शैली UIViewController में एक गणना की गई संपत्ति में बदल गई है जिसे आप इस तरह से ओवरराइड कर सकते हैं:

override var preferredStatusBarStyle: UIStatusBarStyle {
   return .lightContent //or default
} 

13

IOS 9 पर निम्नलिखित (setStatusBarStyle) को हटा दिया गया है और यदि आप इस तरह से जाते हैं तो आपको चेतावनी मिल जाएगी।

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

यदि आप चाहते हैं कि सभी स्टेटसबार एक ही शॉट में बदलकर आपके Info.plist में निम्नलिखित जोड़ दें। इससे आपका लॉन्च-स्क्रीन स्टेटस बार व्हाइट भी हो जाएगा। जबकि ऊपर कोड नहीं होगा।

<key>UIStatusBarStyle</key>
<string>UIStatusBarStyleLightContent</string>
<key>UIViewControllerBasedStatusBarAppearance</key>
<false/>

.Plist दृष्टिकोण सही है, लेकिन setStatusBarStyle () आवश्यक नहीं है। 'setStatusBarStyle (_: एनिमेटेड :)' को iOS 9.0 में अपग्रेड किया गया था: उपयोग - [UIViewController को प्राथमिकता दी गई StatusBarStyle]
बिल चैन

@BillChan टिप्पणी करने के लिए धन्यवाद, लेकिन उत्तर पाने के लिए कृपया पढ़ें। मैंने पहले ही समझाया 'setStatusBarStyle' को पदावनत कर दिया गया। यदि आप एक या दूसरे दृश्य को बदलना चाहते हैं तो आपको पसंदीदास्टैटबर्टल का उपयोग करना चाहिए। प्लिस्ट दृष्टिकोण यह है कि कौन सभी दर्शकों को एक शॉट में बदलना चाहता है। यहां कोई सही या गलत नहीं है। बस आपको हासिल करने की जरूरत है।
GuiSoySauce 10

1
UIStatusBarStyle = UIStatusBarStyleLightContent (.plist) ने सफेद स्थिति पट्टी पाठ के साथ मेरे ऐप लॉन्च में मदद की ... धन्यवाद !!!
क्रिस ऑलिन्सन

10

मेरे लिए उपरोक्त सभी कार्य मेरे जोड़ने तक काम नहीं करते:

self.navigationController?.navigationBar.barStyle = .black;

इसलिए:

  1. को सेट UIViewControllerBasedStatusBarAppearanceकरेंYES में.plist
  2. में viewDidLoad कॉलself.setNeedsStatusBarAppearanceUpdate();
  3. अधिमानी प्राथमिकताएंस्टार्टबर्टल्टी
    override var preferredStatusBarStyle: UIStatusBarStyle { return .lightContent }
  4. ओवररेटेड विधि में मैंने प्रकाश सामग्री के लिए भी navigationBar.barStyleअंतिम सेट किया है: और काली सामग्री के लिए डिफ़ॉल्ट का उपयोग करें

    override var preferredStatusBarStyle: UIStatusBarStyle { self.navigationController?.navigationBar.barStyle = .black;//or default return .lightContent //or default }

यहाँ और यहाँ से स्रोत ।

और अगर यह काम नहीं करता है तो आप एक जोड़ने की कोशिश कर सकते हैं UINavigationController extension:

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

        return .default
    }
}

1
नेविगेशन बार शैली के लिए कोई टिप्पणी नहीं ... लेकिन स्विफ्ट 3 में, एक्सकोड 8 - यह एकमात्र समाधान था जो मेरे लिए काम करता था।
Despotovic

एकमात्र दोष मैंने देखा है कि उन सभी चरणों के साथ यह बदल जाता है लेकिन एनीमेशन के बिना
लुकाज़ 'सेवेरियन' ग्रीला

6

स्विफ्ट, 3.1 और XC8.2.1 का उपयोग कर, लेकिन उपरोक्त सभी काम नहीं किया।

मैंने जो किया, वह बस है

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

न प्लास्ट, न अन्य सामान। HTH


स्विफ्ट 4.2 के लिए भी काम करता है।
जीशान

2

स्विफ्ट 3.0 में आप नियंत्रक-आधारित स्थिति बार उपस्थिति के लिए ViewController में एक गेट को ओवरराइड कर सकते हैं:

override var preferredStatusBarStyle: UIStatusBarStyle {
    get { return .lightContent }
}

1

अपने Info.plist को संपादित न करें। इसे अपने ViewController.swift में जोड़ें:

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

1

चरण 1. info.plist में जोड़ें View controller-based status bar appearance -> NO

चरण 2. विधि में कोड जोड़ें जहां आपको स्थिति बार रंग बदलने की आवश्यकता है:

UIApplication.shared.statusBarStyle = .lightContent //(or .default)
setNeedsStatusBarAppearanceUpdate()

कोड की मुख्य पंक्ति: setNeedsStatusBarAppearanceUpdate()

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.