स्विफ्ट 3 में स्टेटस बार स्टाइल कैसे सेट करें


186

मैं Xcode 8.0 बीटा 4 का उपयोग कर रहा हूं।

पिछले संस्करण में, स्थिति बार शैली को सेट करने के लिए UIViewController की विधि है

public func preferredStatusBarStyle() -> UIStatusBarStyle

हालाँकि, मैंने पाया कि यह स्विफ्ट 3 में "गेट ओनली वेरिएबल" में बदल गया है।

public var preferredStatusBarStyle: UIStatusBarStyle { get } 

शैली को मेरे UIViewController में उपयोग करने के लिए कैसे प्रदान कर सकते हैं?


इस संस्करण को आज़माएँ ।StatusBarStyle: UIStatusBarStyle = .lightContent
Anbu.Karthik

जवाबों:


484

[अद्यतन] Xcode के लिए 10+ और स्विफ्ट 4.2+

यह iOS 7 और उच्चतर के लिए पसंदीदा तरीका है

अपने एप्लिकेशन में Info.plist, पर सेट View controller-based status bar appearanceकरें YES

आपके प्रत्येक दृश्य नियंत्रक में ओवरराइड preferredStatusBarStyle ( Apple डॉक्स )। उदाहरण के लिए:

override var preferredStatusBarStyle: UIStatusBarStyle {     
      return .lightContent
}

यदि आपके पास preferredStatusBarStyleकुछ अलग-अलग पसंदीदा स्टेटस बार स्टाइल है, जो आपके व्यू कंट्रोलर के अंदर बदलता है (उदाहरण के लिए, चाहे स्क्रॉल स्थिति हो या चाहे कोई प्रदर्शित छवि डार्क हो), तो आप कॉल करना चाहेंगेsetNeedsStatusBarAppearanceUpdate() उस स्थिति में बदलाव होने ।

संस्करण 7 से पहले iOS, पदावनत विधि

Apple ने इसे अपदस्थ कर दिया है इसे हटा दिया है, इसलिए इसे भविष्य में हटा दिया जाएगा। उपरोक्त विधि का उपयोग करें ताकि अगले iOS संस्करण जारी होने पर आपको इसे फिर से लिखना न पड़े।

यदि आपका आवेदन समर्थन करेगा, तो आपके आवेदन में Info.plist, पर सेट View controller-based status bar appearanceकरें NO

में appDelegate.swift, didFinishLaunchingWithOptionsसमारोह, जोड़ें:

UIApplication.shared.statusBarStyle = .lightContent

नेविगेशन नियंत्रक के लिए

यदि आप एक नेविगेशन नियंत्रक का उपयोग करें और आप प्रत्येक दृश्य नियंत्रक के पसंदीदा स्थिति पट्टी शैली का इस्तेमाल किया और सेट किया जा चाहते हैं View controller-based status bar appearanceकरने के लिए YESअपने आवेदन की मेंinfo.plist

extension UINavigationController {
   open override var preferredStatusBarStyle: UIStatusBarStyle {
      return topViewController?.preferredStatusBarStyle ?? .default
   }
}

3
मेरे लिये कार्य करता है। पहले Info.plist में नई सेटिंग सम्मिलित करना न भूलें।
falsecrypt

1
@LightMan uiapplication statusBarStyle को पदावनत नहीं किया गया है, मैंने iOS 11 में इसका उपयोग किया है और यह काम करता है।
सुशोभित

1
@Sushobhit setStatusBarStyle को iOS 9 में अपग्रेड किया गया था, जैसा कि इस उत्तर में इस्तेमाल किया गया है। लेकिन आपके पास अभी भी UIApplication.statusBarStyle एक रीड ओनली प्रॉपर्टी है।
लाइटमैन

1
ऐसे समय होते हैं जब आप प्रत्येक दृश्य के रंग के कारण इसे प्रोग्रामेटिक रूप से सेट करना चाहते हैं।
अलेजांद्रो कैवाज़ोस

9
आप appDelegate.swift में लाइन भी हटा सकते हैं और टार्गेट पर जा सकते हैं -> जनरल -> परिनियोजन जानकारी -> स्टेटस बार स्टाइल -> लाइट
रॉबर्ट विरेना

162

नवीनतम अपडेट (Xcode 10+ / स्विफ्ट 4.2+)

यह लेख पिछले कई वर्षों से मौजूद विभिन्न दृष्टिकोणों के पीछे के तर्क को समझने के इच्छुक किसी भी व्यक्ति के लिए बरकरार है। इस बीच, Xcode 10 के रूप में , स्विफ्ट 4.2 का पहला दृष्टिकोण पदावनत है और अब समर्थित नहीं है (अर्थात यदि आप इसे नियोजित करने की कोशिश करेंगे तो प्रभावी नहीं होंगे )। Plist.infoध्वज और कस्टमाइज़िंग अभ्यास के पीछे के तर्क को बेहतर ढंग से समझने के लिए आपकी जानकारी के लिए यह अभी भी संदर्भित है ।

महत्वपूर्ण स्पष्टीकरण

स्टेटस बार उपस्थिति को अनुकूलित करने के लिए दो दृष्टिकोणों को समझना बहुत महत्वपूर्ण है। वे अलग हैं और मिश्रित नहीं होना चाहिए।

पहला दृष्टिकोण - पूरे ऐप के लिए एक रंग (iOS7 से हटा दिया गया)

Info.plist में आप एक कुंजी को ढूंढते हैं या बनाते हैं

View controller-based status bar appearance

और इसे NO पर सेट करें ।

यह क्या करता है? यह अनिवार्य रूप से एक सेटिंग स्थापित करता है जो कहता है कि आपके आवेदन में, स्थिति बार उपस्थिति को प्रत्येक दृश्य नियंत्रक द्वारा व्यक्तिगत रूप से परिभाषित नहीं किया गया है । यह समझने के लिए सुपर महत्वपूर्ण है। इसका मतलब है कि आपके पास सभी स्क्रीन के लिए पूरे ऐप के लिए एकसमान सेटिंग है। दो सेटिंग्स हैं: defaultजो सफेद पृष्ठभूमि पर काला पाठ है, या lightContentजो काली पृष्ठभूमि पर सफेद पाठ है।

इनमें से एक को सेट करने के लिए ( सभी स्क्रीन के लिए एक सेटिंग ):

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    application.statusBarStyle = .lightContent // .default
    return true
}

इस तरह आपको प्रत्येक दृश्य नियंत्रक पर इस सेटिंग को फिर से स्थापित करने की आवश्यकता नहीं होगी। हालाँकि, आप हमेशा स्वेच्छा से उपस्थिति बदलने के लिए इस पद्धति का सहारा ले सकते हैं।

दूसरा दृष्टिकोण - प्रत्येक दृश्य नियंत्रक के लिए अलग-अलग रंग

यह विपरीत है। इसे काम करने के लिए, info.plist पर आगे बढ़ें और सेट करें

View controller-based status bar appearance

, हाँ

इस तरह, जब भी कोई नया व्यू कंट्रोलर ओपन होता है, तो स्टेटस बार स्टाइल को व्यक्तिगत रूप से सेट किया जाता है यदि आप इस कार्यान्वयन को उस प्रत्येक UIViewControllerउदाहरण में सम्मिलित करते हैं जिसकी आपको आवश्यकता है:

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

आपके पास पहले जैसा ही है, स्टेटसबार के लिए या तो डार्क या लाइट स्टाइल, प्रत्येक व्यू कंट्रोलर के लिए अलग-अलग सेट करें।

यह संपत्ति UIKit द्वारा दो परिदृश्यों में प्राप्त की गई है:

  1. स्क्रीन के आरंभीकरण पर, जब UI तैयार किया जा रहा हो।
  2. setNeedsStatusBarAppearanceUpdate()कोड में कॉल करने पर ।

बाद के मामले में, आप निम्न कोड द्वारा स्टेटबार उपस्थिति में हेरफेर करने के लिए पात्र हैं:

var isDark = false {
    didSet {
        setNeedsStatusBarAppearanceUpdate()
    }
}

override var preferredStatusBarStyle: UIStatusBarStyle {
    return isDark ? .lightContent : .default
}

func toggleAppearance() {
   isDark.toggle()
}

फिर, जब भी बुलाओगे toggleAppearance() , स्टेटसबार शैली परिवर्तन शुरू हो जाएगा।

तीसरा दृष्टिकोण - हैक!

एक हैक है जो सीधे स्थिति पट्टी तक पहुँचने की अनुमति देता है:

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    
    if let statusBar = UIApplication.shared.value(forKey: "statusBar") as? UIView {
        statusBar.backgroundColor = UIColor.blue
    }
    
    return true
}

हैक क्यों? अगर आपको ब्लैक या व्हाइट के अलावा स्टेटस बार कलर की जरूरत है, तो आप अनडिमेंटेड एपीआई का इस्तेमाल करते हैं। आप statusBarकेवीसी का उपयोग करके ऑब्जेक्ट प्राप्त करते हैं और इसकी पृष्ठभूमि का रंग सेट करते हैं। ऑब्जेक्ट आपको इस तरह से मिलता है UIStatusBar, जो कि प्राप्त होता है UIViewऔर इस प्रकार स्वाभाविक रूप से backgroundColorसंपत्ति का समर्थन करता है। यह गंदा है, कानूनी तरीका नहीं है, लेकिन अभी तक यह स्टेटसबार के लिए कस्टम रंग स्थापित करने (खाते में नहीं लेने) का एकमात्र तरीका हैUINavigationBar दृष्टिकोण , जो पूरी तरह से नेवबार + स्टेटसबार उपस्थिति को अनुकूलित करने की अनुमति देता है)। यह आपके ऐप को अस्वीकार कर दिया जा सकता है। लेकिन शायद आप भाग्यशाली हैं। और अगर आप कुछ जटिल परिस्थितियों (जैसे नेस्टेड, चाइल्ड नेविगेशन और व्यू कंट्रोलर्स की पदानुक्रम) में हैं, तो यह बहुत ही एकमात्र हो सकता है, या कम से कम कम परेशानी वाला तरीका है जो स्टेटसबार उपस्थिति को अनुकूलित कर सकता है (उदाहरण के लिए, इसे पारदर्शी बनाने के लिए)

Xcode 10+, स्विफ्ट 4.2

कोई और विकल्प नहीं हैं: डेवलपर को प्रत्येक दृश्य नियंत्रक को स्टेटसबार उपस्थिति को परिभाषित करने की अनुमति देनी चाहिए , ध्वज को YES को सेट करना चाहिए (या इस क्रिया को छोड़ना चाहिए, क्योंकि यह डिफ़ॉल्ट रूप से YES है) और उपरोक्त निर्देशों का पालन करें।


बक्शीश

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

extension UIViewController {
    func setStatusBarStyle(_ style: UIStatusBarStyle) {
        if let statusBar = UIApplication.shared.value(forKey: "statusBar") as? UIView {
            statusBar.backgroundColor = style == .lightContent ? UIColor.black : .white
            statusBar.setValue(style == .lightContent ? UIColor.white : .black, forKey: "foregroundColor")
        }
    }
}

2
एक बार आपके पास स्टेटस बार होने के बाद, आप यह भी कर सकते हैं: statusBar.setValue (UIColor.red, forKey: "frontgroundColor"); या किसी भी संपत्ति को सेट करने के लिए किसी भी मौजूदा कुंजी का उपयोग करें जो UIStatusBar के लिए उपलब्ध है लेकिन UIView के लिए नहीं है
Mark

application.statusBarStyle = .light यह दृष्टिकोण आमतौर पर iOS9 के बाद से है, iOS9 में 'statusBarStyle' के लिए सेटर को पदावनत कर दिया गया था: उपयोग - [UIViewController को प्राथमिकता दी जाने वाली
Starbartyty

ऐप के कलर थीम को बदलते समय यहां यह एकमात्र काम करता है। हालाँकि, ऐसा लगता है, एक बार यह सेट हो जाने के बाद, आपको व्यू कंट्रोलर्स स्विच करते समय इसे हमेशा रीसेट करना होगा। पसंदीदास्टैटबर्टल्टी () विधि को यहां से (यहां तक ​​कि info.plist में उचित सेटिंग के साथ) पर ध्यान नहीं दिया गया है।
nontomatic

2
यह उत्तर अन्य की तुलना में अधिक वर्णनात्मक है।
विरुअक्ष

2
बोनस समाधान iOS 13.1
वीरूमैक्स

130

आप इसे सेट करने के बजाय दिए गए मान को ओवरराइड करने का प्रयास कर सकते हैं। विधि को {get} के रूप में घोषित किया जाता है, इसलिए बस एक getter प्रदान करें:

 override var preferredStatusBarStyle: UIStatusBarStyle {
    return .lightContent
}

यदि आप इसे सशर्त रूप से सेट करते हैं, तो आपको कॉल करने की आवश्यकता होगी, setNeedsStatusBarAppearanceUpdate()ताकि जब आप तैयार हों तो यह परिवर्तन को चेतन कर दे


2
यह एक बेहतर तरीका है क्योंकि आप prefersStatusBarHiddenअपने कुछ विचारों को चुन सकते हैं । यदि आप साथ जा रहे हैं तो आप इसके साथ UIApplication.shared.statusBarStyleफंस जाएंगे।
superarts.org

105

स्विफ्ट 3 और 4, आईओएस 10 और 11, एक्सकोड 9 और 10
मेरे लिए, यह विधि काम नहीं करती है:

override var preferredStatusBarStyle: UIStatusBarStyle {
    return .lightContent
}

जब मैं प्रत्येक दृश्य नियंत्रक का उपयोग करता था, लेकिन यह काम करता था:

  • फ़ाइल info.list में, पंक्ति जोड़ें: View controller-based status bar appearanceऔर पर सेट करेंNO

  • अगले में appdelegate:

    UIApplication.shared.statusBarStyle = .lightContent

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

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

33

यदि आप statusBarरंग को सफेद रंग में बदलना चाहते हैं , तो इसमें शामिल सभी विचारों के लिए UINavigationController, इसे अंदर जोड़ें AppDelegate:

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

    UINavigationBar.appearance().barStyle = .blackOpaque
    return true
}

यह कोड:

override var preferredStatusBarStyle: UIStatusBarStyle {
    return .lightContent
}

यह नहीं है के लिए काम UIViewControllersएक में निहित UINavigationControllerके लिए, क्योंकि संकलक दिखता है statusBarStyleकी UINavigationController, नहीं करने के लिए statusBarStyleकी ViewControllersयह द्वारा निहित।

आशा है कि यह उन लोगों की मदद करता है जो स्वीकार किए गए उत्तर के साथ सफल नहीं हुए हैं!


हाँ बहुत ध्न्यवाद! नेविगेशन कंट्रोलर थोड़ा बारीक था जिसे कई लोग नहीं मानते थे!
एलेक्सिस

26

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

  • फ़ाइल info.list में पंक्ति जोड़ें: नियंत्रक-आधारित स्थिति बार उपस्थिति देखें और इसे YES पर सेट करें

    var viewIsDark = Bool()
    
    func makeViewDark() {
    
        viewIsDark = true
        setNeedsStatusBarAppearanceUpdate()
    }
    
    func makeViewLight() {
    
        viewIsDark = false
        setNeedsStatusBarAppearanceUpdate()
    }
    
    override var preferredStatusBarStyle: UIStatusBarStyle {
    
        if viewIsDark {
            return .lightContent 
        } else {
            return .default 
        } 
    }

1
औरIf you call this method within an animation block, the changes are animated along with the rest of the animation block.
अलेक्जेंड्रे जी

25

आपको अपनी Info.plist फ़ाइल में नीचे की कुंजी जोड़ने की आवश्यकता है:

View controller-based status bar appearance बूलियन मूल्य के साथ सेट करने के लिए NO

didFinishLaunchingWithOptionsवापसी से पहले अपने आश्रित वर्ग में, विधि में।

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

परिवर्तन backgroundColorऔर statusBarStyleआवश्यकता के अनुसार।


अच्छा समाधान है, लेकिन क्या यह एक निजी एपीआई का उपयोग करने के रूप में गिना जाता है?
गोल्डनजॉय

अच्छी तरह से काम करें लेकिन मैं अपने कस्टम रंग में कैसे बदल सकता हूं?
श्रीनिवासन

"UIColor.red" के बजाय @MohanSrinivasan आप कस्टम रंग निर्दिष्ट कर सकते हैं।
हिमांशु पडिया

25

Xcode 10 या बाद का

स्विफ्ट 5 में परीक्षण किया गया

किसी भी कोड की आवश्यकता नहीं है बस नीचे दिए गए चरणों का पालन करें।

अगर आप पूरे ऐप में स्टेटस बार बदलना चाहते हैं।

  1. प्रोजेक्ट नेविगेटर (लेफ्ट साइड पैनल) से प्रोजेक्ट चुनें।
  2. लक्ष्य का चयन करें।
  3. सामान्य टैब चुनें।
  4. परिनियोजन जानकारी ढूँढें।
  5. स्थिति बार शैली को लाइट में बदलें (डार्क बैकग्राउंड के लिए "लाइट" , लाइट बैकग्राउंड "डिफ़ॉल्ट" )

Info.plist परिवर्तन मत भूलना

  1. जानकारी टैब चुनें
  2. अपनी कुंजी फ़ाइल "नियंत्रक-आधारित स्थिति बार उपस्थिति" = NO में इस कुंजी को जोड़ें

अपने प्रोजेक्ट को चलाएं और उसकी जांच करें।

स्विफ्ट 5 और एक्सकोड 10.2 और 11.0 में मेरा प्रोजेक्ट


Xcode 10 / Swift5 के लिए यह स्वीकृत उत्तर होना चाहिए। काम करने के लिए आपको BOTH के चरण करने चाहिए।
जॉन रोबी

उत्तम। धन्यवाद! मैं मानता हूं कि यह वास्तविक स्वीकृत उत्तर होना चाहिए।
डंगीनडेव

यह सही उत्तर है n
nikhilgohil11

यह पूरी तरह से स्विफ्ट 5 के साथ xcode 11 के लिए भी काम करता है, धन्यवाद
लुइस सैंटियागो

13

आप इसे स्टोरीबोर्ड में भी कर सकते हैं

  1. Info.plist में नई प्रविष्टि बनाएँ "कंट्रोलर-आधारित स्थिति बार उपस्थिति देखें" इसे "YES" पर सेट करें।
  2. अपने स्टोरीबोर्ड पर जाएं और फिर नेविगेशन नियंत्रक का चयन करें जिसे आप बदलना चाहते हैं। स्टोरीबोर्ड दस्तावेज़ रूपरेखा अनुभाग से नेविगेशन बार पर क्लिक करें (स्टोरीबोर्ड पर बाएं पैनल)
  3. दाएं पैनल पर जाएं और विशेषताएँ अनुभाग पर क्लिक करें
  4. नेविगेशन बार अनुभाग के तहत आप शैली देखेंगे। वह शैली चुनें जिसे आप पसंद करेंगे (डिफ़ॉल्ट ब्लैक के लिए है और ब्लैक व्हाइट के लिए है)

आपको प्रत्येक नेविगेशन नियंत्रक के लिए यह करना होगा। हालाँकि, उस नेविगेशन नियंत्रक के अंतर्गत कोई भी दृश्य आपके द्वारा चयनित किसी भी दृश्य की स्थिति बार शैली / रंग को बदल देगा। मुझे यह विकल्प बेहतर लगता है क्योंकि आप अपने परिणामों को तुरंत देख सकते हैं और प्रत्येक दृश्य नियंत्रक में कोड की अतिरिक्त पंक्तियों को जोड़ना नहीं है।

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

(सभी स्विफ्ट परियोजना में Xcode 8.3.3 के साथ किया गया)


"कंट्रोलर-आधारित स्थिति बार उपस्थिति" को "NO" पर सेट करना चाहिए
विलज

2
कंट्रोलर कंटेंट के हिसाब से स्टेटस बार स्टाइल सेट करने का बहुत साफ तरीका है, जो View controller-based status bar appearance = NOकि पूरे ऐप में सिर्फ लाइट या डार्क स्टाइल का इस्तेमाल करने के लिए सिर्फ सेटिंग और सेटिंग के बजाय सही तरीका है । यह शर्म की बात है कि यह "कोडलेस" तरीका केवल नेविगेशन कंट्रोलर में काम करता है, Apple को किसी भी व्यू कंट्रोलर इंस्टेंस के अंदर इस विकल्प को सेट करने के लिए किसी अन्य फ़ील्ड को जोड़ने पर विचार करना चाहिए।
aldoram5

12

IOS 11, Swfit 4/5 समाधान पर सभी दर्शकों के लिए स्थिति बार बदलने की तलाश कर रहे लोगों के लिए बहुत आसान है।

1) Info.plist जोड़ें:

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

2) XCode slect प्रोजेक्ट के बाईं ओर> लक्ष्य > अपनी परियोजना का चयन करें> सामान्य के तहत> परिनियोजन जानकारी> स्थिति पट्टी शैली चुनें: लाइट

यदि आप केवल एक व्यू कॉन्ट्रोलर के लिए स्टेटस बार बदलना चाहते हैं , तो व्यूडालड पर जोड़ें:

2.1 ) Info.plist

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

२.२ )

override var preferredStatusBarStyle : UIStatusBarStyle {
    return .lightContent
}

उद्देश्य-सी (या मूल निवासी की प्रतिक्रिया) अनुप्रयोग प्रतिनिधि से बदल रहा है:

1) Info.plist जोड़ें:

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

2) AppDelegate -> didFinishLaunchingWithOptions

[[UIApplication sharedApplication] setStatusBarHidden:NO animated:YES];
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleDarkContent animated:YES];

स्टेटस बार बदलने से पुश (नेविगेशन कंट्रोलर) करने की कोशिश नहीं की जाती है, केवल सामान्य रूप से देखने वालों को प्रस्तुत करने पर।


8

पहला कदम आपको कुंजी के साथ एक पंक्ति जोड़ने की आवश्यकता है: View controller-based status bar appearanceऔर फ़ाइल के NOलिए मूल्य Info.plist। उसके बाद, अपने कंट्रोलर में 2 फंक्शन्स को विशिष्ट से जोड़ें, जो कंट्रोलर को प्रभावित करेगा:

override func viewWillAppear(_ animated: Bool) {
       super.viewWillAppear(animated)
       UIApplication.shared.statusBarStyle = .lightContent
}

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

6

स्विफ्ट 3

Info.plist में "दृश्य नियंत्रक-आधारित स्थिति बार उपस्थिति" नामक एक पंक्ति जोड़ें और इसके मान को सेट करें No

class YourViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

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

    }

}

6

नेविगेशन बार के साथ काम करते समय स्टेटस बार टेक्स्ट कलर के बारे में एक छोटी सी बात लगती है।

यदि आप .plist प्रविष्टि चाहते हैं, तो नियंत्रक-आधारित स्थिति बार उपस्थिति सेट करें YES , यह कभी-कभी तब काम नहीं करेगा जब आपके पास रंगीन नौसेना पट्टी हो।

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

override func viewWillAppear(_ animated: Bool) {
    let nav = self.navigationController?.navigationBar
    nav?.barTintColor = .red
    nav?.tintColor = .white
    nav?.titleTextAttributes = [NSAttributedStringKey.foregroundColor: UIColor.white]
    setNeedsStatusBarAppearanceUpdate()
}

तथा

override var preferredStatusBarStyle: UIStatusBarStyle {return .lightContent}

यदि आप AppDelegate में निम्नलिखित सेट कर चुके हैं तो भी उपरोक्त कोड काम नहीं करेगा:

UIApplication.shared.statusBarStyle = .lightContent

अभी भी संघर्ष कर रहे लोगों के लिए, जाहिरा तौर पर यह किसी भी तरह से न्याय करता है यदि स्थिति पट्टी को नौसेना पट्टी में शैलियों द्वारा हल्का या गहरा होना चाहिए। इसलिए, मैं इसे देखने के लिए निम्नलिखित लाइन जोड़कर ठीक करने में कामयाब रहा

nav?.barStyle = UIBarStyle.black

जब बार शैली काली होती है, तो यह आपके ओवरराइड चर को सुनता है। आशा है कि यह किसी की मदद करता है :)


5

Xcode 8.3.1, स्विफ्ट 3.1

  1. Info.plist में एक नई प्रविष्टि बनाएँ "नियंत्रक-आधारित स्थिति बार उपस्थिति देखें" इसे "NO" पर सेट करें।

  2. AppDelegate.swift खोलें और इन पंक्तियों को "didFinishLaunchingWithOptions" विधि में जोड़ें:

application.statusBarStyle =। लाइटकंटेंट


5

यहाँ स्थिति पट्टी शैली परिवर्तन के बारे में Apple दिशानिर्देश / निर्देश है

आप स्थिति पट्टी शैली सेट करना चाहते हैं, अनुप्रयोग स्तर तो सेट UIViewControllerBasedStatusBarAppearanceकरने के लिए NOअपने में .plistफ़ाइल। और अपने appdelegate> didFinishLaunchingWithOptionsनिम्नलिखित ine को जोड़ें (प्रोग्रामिक रूप से आप इसे ऐप प्रतिनिधि से कर सकते हैं)।

उद्देश्य सी

[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent animated:YES];

तीव्र

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    application.statusBarStyle = .lightContent
    return true
}

यदि आप व्यूअर स्तर पर स्टेटस बार स्टाइल सेट करना चाहते हैं, तो इन चरणों का पालन करें:

  1. सेट UIViewControllerBasedStatusBarAppearanceकरने के लिए YESमें .plist, फ़ाइल यदि आप केवल UIViewController स्तर पर सेट स्थिति पट्टी शैली की जरूरत है।
  2. ViewDidLoad में फ़ंक्शन जोड़ें - setNeedsStatusBarAppearanceUpdate

  3. अपने दृश्य नियंत्रक में अधिमान्यस्टार्टबर्टल को ओवरराइड करें।

उद्देश्य सी

- (void)viewDidLoad
{
    [super viewDidLoad];
    [self setNeedsStatusBarAppearanceUpdate];
}

- (UIStatusBarStyle)preferredStatusBarStyle
{
    return UIStatusBarStyleLightContent;
}

तीव्र

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

override var preferredStatusBarStyle: UIStatusBarStyle {
    return .lightContent
}

स्थिति बार शैली सेटअप स्तर के अनुसार .plist का मान सेट करें।

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


5

@ Krunal https://stackoverflow.com/a/49552326/4697535 द्वारा महान asnwer में जोड़ने के लिए

यदि आप एक का उपयोग कर रहे हैं UINavigationController, तो preferredStatusBarStyleइच्छाशक्ति पर कोई प्रभाव नहीं पड़ेगा UIViewController

Xcode 10 और स्विफ्ट 4।

एक प्रथा निर्धारित करें UINavigationController

उदाहरण:

class LightNavigationController: UINavigationController {

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

एप्लिकेशन स्तर समाधान के लिए एक्सटेंशन का उपयोग करें:

extension UINavigationController {

  open override var preferredStatusBarStyle: UIStatusBarStyle {
      guard let index = tabBarController?.selectedIndex else { return .default }
      switch index {
      case 0, 1, 2: return .lightContent // set lightContent for tabs 0-2
      default: return .default // set dark for tab 3
      }
  }
}

4

स्विफ्ट 4.0 कृपया इस कोड का उपयोग "didFinishLaunchingWithOptions launchOptions:" श्रेणी में करें

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

4

स्विफ्ट 4+

सफेद स्टेटबार टेक्स्ट के लिए:

navigationController.navigationBar.barStyle = .blackTranslucent

4

iOS 11.2

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

    UINavigationBar.appearance().barStyle = .black

    return true
}

'BlackOpaque' उपलब्ध नहीं है: UIStatusBarStyleLightContent
Makalele

3

इसने मेरे लिए काम किया

प्लास्ट View controller-based status barमें NO में उपस्थिति सेट करें । UIViewController viewDidAppearकेवल निम्नलिखित लाइन को जोड़ा

UIApplication.shared.setStatusBarStyle(UIStatusBarStyle.lightContent, animated: true)

setStatusBarStyle को iOS 9 में चित्रित किया गया है
लास्टबॉय

3

स्विफ्ट 3

अगर देखें नियंत्रक-आधारित स्थिति बार उपस्थिति = Info.plist में हाँ

फिर सभी नैविगेशन कंट्रोलर के लिए इस एक्सटेंशन का उपयोग करें

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

यदि कोई UINavigationController नहीं है और केवल UIViewController है तो नीचे दिए गए कोड का उपयोग करें:

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

2
मेरे लिए काम नहीं करता है। मुझे त्रुटियाँ मिलती हैं "संपत्ति अपने सुपरक्लास से किसी भी संपत्ति को ओवरराइड नहीं करती है" और "गेटवे फॉर 'पसंदीदास्टैटसबर्सेल्टी' के साथ ऑब्जेक्टिव-सी चयनकर्ता 'पसंदीदास्टैटसबर्सेल्टी' के साथ पिछले घोषणा के साथ टकराव होता है।
थियो

इसके लिए धन्यवाद, 20 अलग-अलग प्रयासों और वस्तुओं के कुछ संयोजनों के बाद यह प्रयास करना है कि स्टेटस बार का रंग सेट किया जाए। जब मैं एक रात मोड में जोड़ रहा था और काले पर काले बस काम नहीं कर रहा था मैं रंग बदलने के लिए करना चाहता था, जब मैं सिर्फ setNeedsStatusBarAppearanceUpdate () कॉल करने के लिए याद किया था।
स्टुअर्ट पी।

3

स्विफ्ट 5

PRAVEEN के उत्तर के लिए https://stackoverflow.com/a/40066798/2082851 पर अधिक विवरण जोड़ने के लिए , मैं अपना कार्यान्वयन प्रदान करना चाहूंगा। यह प्रत्येक नियंत्रक की स्थिति पट्टी को अनुकूलित करने के लिए लचीलेपन का समर्थन करता है

कुल मिलाकर, हम सभी मामलों में संपत्ति को BaseViewControllerसंभालेंगे statusBarStyle। जब आप एक नया नियंत्रक बनाते हैं, तो इसे इस आधार नियंत्रक के उपवर्ग के रूप में बनाएं।

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

कार्यान्वयन

class BaseViewController: UIViewController {

    var statusBarStyle: UIStatusBarStyle = .default {
        didSet {
            setNeedsStatusBarAppearanceUpdate()
        }
    }

    override var preferredStatusBarStyle: UIStatusBarStyle {
        return statusBarStyle
    }
}

डेमो

class ViewController: BaseViewController, UIScrollViewDelegate {

    let scrollView = UIScrollView()
    ... 
    func scrollViewDidScroll(_ scrollView: UIScrollView) {
        UIView.animate(withDuration: 0.3) {
            if scrollView.contentOffset.y > 30 {
                self.statusBarStyle = .darkContent
            } else {
                self.statusBarStyle = .lightContent
            }
        }
    }
}

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

2। UINavigationController

इसके लिए UINavigationController, यह एक विशेष मामला है, जिसका आप या तो समाधान कर सकते हैं:

समाधान A: संदेश प्रेषण के साथ ओवरराइड

चूंकि UINavigationController एक NSObjectऔर से विरासत में मिला है ObjectiveC, इसके तरीके हैं message dispatchऔर आप उन्हें ओवरराइड कर सकते हैं।

extension UINavigationController {
   open override var preferredStatusBarStyle: UIStatusBarStyle {
      return topViewController?.preferredStatusBarStyle ?? .default
   }
}

समाधान बी: UINavigationControllerउपवर्ग बनाएं

यदि आपके पास पहले से ही एक प्रथा है UINavigationController(जिसे आमतौर पर अधिक आवश्यकताओं को नियंत्रित करने की आवश्यकता है), तो यह आपके लिए सबसे अच्छा समाधान है।

final class NavigationController: UINavigationController {
    override var preferredStatusBarStyle: UIStatusBarStyle {
        return topViewController?.preferredStatusBarStyle ?? super.preferredStatusBarStyle
    }
}

2

आप स्टेटस बार कलर को टॉगल करने के लिए "shouldStatusBarDark" नामक बूल प्रॉपर्टी का उपयोग कर सकते हैं। और आप स्क्रॉल करते समय स्टेटस बार का रंग बदलने के लिए इसके मूल्य को भी अपडेट कर सकते हैं।

 var shouldStatusBarDark = false {
     didSet {
         setNeedsStatusBarAppearanceUpdate()
     }
 }

 override var preferredStatusBarStyle: UIStatusBarStyle {
     return shouldStatusBarDark ? .default : .lightContent
 }

 func scrollViewDidScroll(_ scrollView: UIScrollView) {
     let offSetY = scrollView.contentOffset.y
     if offSetY > 50 {
         UIView.animate(withDuration: 0.4, animations: {
             self.navView.alpha = 1
             self.shouldStatusBarDark = true
         })
     } else {
         UIView.animate(withDuration: 0.4, animations: {
             self.navView.alpha = 0
             self.shouldStatusBarDark = false
         })
     }
 }

क्या है नावावे प्रॉपर्टी? अपना समाधान साझा करने के लिए धन्यवाद
medskill

1
@medskill navView सिर्फ एक मिमिक नेविगेशन बार है जिसे प्रोग्रामेटिक रूप से जोड़ा गया है।
तियानगोंग

2

इनमें से अधिकांश जवाब एक ही चीज़ हैं, फिर से हैशेड किया गया है, लेकिन उनमें से कोई भी वास्तव में एक अंधेरे पृष्ठभूमि का उपयोग करते समय मेरे लिए लॉन्च स्क्रीन को संबोधित नहीं करता है।

मुझे इसमें निम्नलिखित के साथ मिला है, info.plistजिसमें एक हल्का स्टाइल स्टेटस बार निर्मित किया गया है।

<key>UIStatusBarStyle</key>
<string>UIStatusBarStyleLightContent</string>

2

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

//To set the status bar to white
self.navigationController?.navigationBar.barStyle = .black //or .blackTranslucent

//To set the status bar to black
self.navigationController?.navigationBar.barStyle = .default

यह आपके नावबार को नहीं बदलेगा यह विशुद्ध रूप से शैली को इंगित करता है और इसलिए तदनुसार स्थिति पट्टी बदलता है।

एनबी। आपको यह सुनिश्चित करने की आवश्यकता है कि आप अपने info.plist में सेट करें।

View controller-based status bar appearance to YES

2

यदि आप मोडल प्रस्तुति का उपयोग कर रहे हैं तो आपको सेट करने की आवश्यकता है:

viewController.modalPresentationCapturesStatusBarAppearance = true


0

ऑब्जेक्टिव C के लिए बस इस लाइन को अपने एप्लिकेशन didFinishLaunch मेथड में जोड़ें

UIApplication.sharedApplication.statusBarStyle = UIStatusBarStyleLightContent;

3
यह iOS 9
MK_Dev

0

WebkitView का उपयोग करना

स्विफ्ट 9.3 iOS 11.3

import UIKit
import WebKit

class ViewController: UIViewController, WKNavigationDelegate, WKUIDelegate {

    @IBOutlet weak var webView: WKWebView!
    var hideStatusBar = true

    override func loadView() {
        let webConfiguration = WKWebViewConfiguration()
        webView = WKWebView(frame: .zero, configuration: webConfiguration)
        webView.uiDelegate = self
        view = webView
    }

    override func viewDidLoad() {
        super.viewDidLoad()
        self.setNeedsStatusBarAppearanceUpdate()
        let myURL = URL(string: "https://www.apple.com/")
        let myRequest = URLRequest(url: myURL!)
        UIApplication.shared.statusBarView?.backgroundColor = UIColor.red

         webView.load(myRequest)

    }
}

extension UIApplication {

    var statusBarView: UIView? {
        return value(forKey: "statusBar") as? UIView
    }

}

3
स्विफ्ट 9.3? गलत वर्ष, मार्टी
आईओएस यूनिट

मैं "स्टेटसबार" को छोड़ने के लिए निजी एपीआई का उपयोग करने से दूर रहने की सलाह देता हूं। Apple हर समय एपीआई में बदलाव करता है! और जब ऐप्पल बदलता है तो एपीआई आपका ऐप क्रैश हो सकता है और यह स्टेटस बार को नहीं बदलेगा। यह आपको एक और समाधान के लिए फिर से खोज करने के लिए बना देगा।
सोसाइटी

0

यदि आप अभी भी विधि पर स्थिति बार शैली के आधार को बदलने में असमर्थ हैं

override var preferredStatusBarStyle: UIStatusBarStyle {
    return .lightContent
}

आप इस विधि का उपयोग करके देख सकते हैं:

override viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    navigationController?.navigationBar.barStyle = .black
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.