UIStatusBarStyle PreferredStatusBarStyle iOS 7 पर काम नहीं करता है


110

IOS 7 के लिए Xcode 5 के साथ निर्मित मेरे iPhone एप्लिकेशन में मैंने सेट UIViewControllerBasedStatusBarAppearance=YESकिया है info.plist, और मेरे ViewControllerपास यह कोड है:

-(UIStatusBarStyle) preferredStatusBarStyle
{
    return UIStatusBarStyleLightContent;
}

लेकिन ब्लैक बैकग्राउंड के मुकाबले स्टेटस बार अभी भी काला है।

मैं इसके संभावित पता सेट करके इस एप्लिकेशन को चौड़ा बदलने के लिए UIViewControllerBasedStatusBarAppearance=NOमें info.plistहै, लेकिन मैं वास्तव में एक पर इस को बदलने की जरूरत viewControllerद्वारा viewControllerकार्यावधि में आधार।


नमस्ते, मेरे पास एक ही मुद्दा है जैसे आपने प्रश्न में उल्लेख किया है। क्या आपको इसका हल मिला? कृपया मुझे वह प्रदान करें।
नंदला संदीप

आप इस पर एक नज़र डाल सकते हैं: एप्लीकेशन स्टेटस बार टेक्स्ट कलर
1218GG

जवाबों:


281

मुझे पता चला कि यदि आपका ViewController एक नैविगेशन कंट्रोलर के अंदर है, तो नैविगेशन navigationBar.barStyleकंट्रोलर ने स्टेटसबर्टी को निर्धारित करता है।

अपने navigationBar की स्थापना barStyleकरने के लिए UIBarStyleBlackTranslucentसफेद स्थिति पट्टी पाठ (यानी। दे देंगे UIStatusBarStyleLightContent), और UIBarStyleDefaultकाले स्थिति पट्टी पाठ दे देंगे (यानी। UIStatusBarStyleDefault)।

ध्यान दें कि यह तब भी लागू होता है जब आप इसके माध्यम से नेविगेशनबार के रंग को पूरी तरह से बदलते हैं barTintColor


यह मेरे लिए समझ में आता है ... महान
निक

14
मेरा मानना है कि क्योंकि यह है UINavigationController's preferredStatusBarStyleViewController यह मेजबान के माध्यम से फोन नहीं करता है, और इसके बजाय सिर्फ अपनी navigationBarStyle के आधार पर रिटर्न।
mxcl

इस मामले में दृश्य नेविगेशन नियंत्रक के अंदर नहीं है।
एंड्रयू स्मिथ

यह सोचने के लिए बहुत ही उचित है कि बार शैली दृश्य नियंत्रक में एक कार्यान्वित विधि पर वरीयता लेती है, और केवल जब मोडल विचार प्रस्तुत करते हैं!
मेटज

3
UIBarStyleBlackTranslucent पदावनत किया जाता है, UIBarStyleBlackइसके बजाय
Nhon Nguyen

87

ठीक है, यहाँ चाल है। आपको कुंजी "नियंत्रक-आधारित स्थिति पट्टी देखें" को जोड़ना होगा और मान को संख्या पर सेट करना होगा।

यह इस कुंजी का अर्थ प्रकट होने पर काउंटर है, लेकिन यदि आप मान सेट करते हैं No, तब भी आप स्थिति बार की उपस्थिति बदल सकते हैं, और यह किसी भी दृश्य नियंत्रक में दिखाता है या नहीं। तो यह "हाँ" की तरह काम करता है, लेकिन इसे "नहीं" पर सेट करता है!

अब मुझे स्टेटस बार व्हाइट या डार्क मिल सकता है।


6
मेरे लिए यह गलत था। जैसा कि आप अपेक्षा करेंगे, कुंजी को "हां" पर सेट करने की आवश्यकता है। मैं Xcode 5.1 iOS 7.1 पर हूं, इसलिए शायद यह बदल गया है।
joel.d

मैं Xcode 5.1 और iOS 7.1 का उपयोग कर रहा हूं और NO मेरे लिए काम कर रहा है ... STRANGE।
अर्जुन मेहता

मुझे इस कुंजी को कहां जोड़ना चाहिए?
हाडू

अपनी [AppName] -Info.plist फ़ाइल में
Saren Inden

1
यह ठीक काम करता है जब Xcode6.0, आईओएस 8.0 के साथ "देखें नियंत्रक आधारित स्थिति पट्टी" "हाँ" की कुंजी सेट
bpolat

77

preferredStatusBarStyle()भीतर काम करने के लिए UINavigationControllerऔर UITabBarControllerमैं निम्नलिखित कोड जोड़ता हूं, जो वर्तमान में दृश्यमान नियंत्रक से पसंदीदा स्थिति बार शैली प्राप्त करेगा।

extension UITabBarController {
    public override func childViewControllerForStatusBarStyle() -> UIViewController? {
        return selectedViewController
    }
}

extension UINavigationController {
    public override func childViewControllerForStatusBarStyle() -> UIViewController? {
        return visibleViewController
    }
}

के लिए स्विफ्ट 3 उन तरीकों लेकिन गुण नहीं हैं:

extension UITabBarController {
    open override var childViewControllerForStatusBarStyle: UIViewController? {
        return selectedViewController
    }
}

extension UINavigationController {
    open override var childViewControllerForStatusBarStyle: UIViewController? {
        return visibleViewController
    }
}

स्विफ्ट 4.2 गुण नाम दिया गया है:

extension UITabBarController {
   open override var childForStatusBarStyle: UIViewController? {
        return selectedViewController
    }
}

extension UINavigationController {
   open override var childForStatusBarStyle: UIViewController? {
        return visibleViewController
    }
}

प्रयोग

class ViewController: UIViewController {

    // This will be called every time the ViewController appears
    // Works great for pushing & popping
    override var preferredStatusBarStyle: UIStatusBarStyle {
        return .lightContent
    }

}

6
यह अब तक का सबसे अच्छा उत्तर है (उन ऐप्स के लिए जो UINavigationController या UITabBarController
Kesava

1
इसके लिए क्या उपयोग है?
अंबिस

@ इन तरीकों का उपयोग UIKit द्वारा किया जाता है। आपको इसे अपने प्रोजेक्ट में जोड़ने के अलावा और कुछ करने की आवश्यकता नहीं है।
डैनियल वुड

@DanielWood हाँ, मुझे लगा कि और पूरी तरह से भूल गया कि मैंने अपनी पिछली परियोजनाओं में से एक में इस सटीक एक ही चीज़ का उपयोग किया है, हालांकि थोड़ा अलग है।
अंबिसव

यह वास्तव में सबसे अच्छा जवाब है
मूसा अल्मात्री

33

मैं इसमें थोड़ा देरी से आ सकता हूं, लेकिन किसी और को काम करने और सत्यापित ऐप के विस्तृत समाधान की तलाश है।

@mxcl यह वर्णन करने में सही है कि ऐसा क्यों हो रहा है। इसे ठीक करने के लिए, हम केवल एक एक्सटेंशन (या obj-c में श्रेणी) बनाते हैं जो कि UINavigationController की पसंदीदासैटसबर्टल () विधि को ओवरराइड करता है। यहाँ स्विफ्ट में एक उदाहरण है:

extension UINavigationController {
    public override func preferredStatusBarStyle() -> UIStatusBarStyle {
        if let rootViewController = self.viewControllers.first {
            return rootViewController.preferredStatusBarStyle()
        }
        return super.preferredStatusBarStyle()
    }
}

यह कोड केवल पहला व्यू कंट्रोलर (रूट व्यू कंट्रोलर) निकालता है और उसे अलिखित करता है (obj-c में बस यह जाँच लें कि वह शून्य नहीं है)। यदि एग्रैप सफल है (शून्य नहीं) तो हम रूटव्यूकंट्रोलर्स को प्राथमिकता देते हैं। अन्यथा हम सिर्फ डिफ़ॉल्ट लौटाते हैं।

आशा है कि यह किसी की भी मदद करता है, जिसे इसकी आवश्यकता हो सकती है।


2
स्विफ्ट 2.0 में आपको "UIViewController" की शर्त स्टेटमेंट से हटा देनी चाहिए।
थॉम्पस कैल्मन

शानदार, मैंने "के रूप में" बयान को हटाने के अलावा एक संशोधन किया, मैंने इसे "पहले" से "अंतिम" में बदल दिया इस तरह जो भी व्यू कंट्रोलर उपयोगकर्ता को स्टैक के शीर्ष पर दिखाई दे रहा है, उसे नियंत्रित करने की क्षमता होगी स्थिति पट्टी का रंग। बहुत बढ़िया काम, साझा करने के लिए धन्यवाद!
अनोम

1
यदि आपके नेविगेशन नियंत्रक में कोई दृश्य नियंत्रक नहीं है, तो यह एक अनंत लूप का कारण होगा। return self.preferredStatusBarStyle()इस सटीक विधि में वापस कॉल करेगा।
भालू

1
मेरे मामले में, rootViewController का उपयोग करने के बजाय, मैंने शीर्षदृश्य का उपयोग किया क्योंकि स्टैक के दौरान शैली बदल सकती है।
रिक सैंटोस

2
@ visibleViewControllerकुछ भी बेहतर होगा
Cœur

21

स्वीकृत उत्तर में और अधिक विवरण प्रदान करने के लिए, अपने एप्लिकेशन प्रतिनिधि की didFinishLaunchingWithOptions:विधि में निम्नलिखित पंक्ति डालें :

[UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleLightContent;

फिर, अपने Info.plist में, View controller-based status bar appearanceइसे जोड़ें और सेट करें NO

मेरा मानना ​​है कि यह कैसे होना चाहिए, नेविगेशन कंट्रोलर से नहीं, अगर आप पूरे ऐप के लिए एक ही स्टेटस बार का रंग चाहते हैं। आपके पास ऐसी स्क्रीन हो सकती हैं जो जरूरी नहीं कि कहीं और, या अन्य चीजों और अन्य चीजों में UINavigationControllerएक अलग UINavigationControllerउपवर्ग में एम्बेडेड हों ।

EDIT : आप इसे किसी भी कोड को टाइप किए बिना भी कर सकते हैं: https://stackoverflow.com/a/18732865/855680


1
ध्यान दें कि यह तरीका IOS 9.0 से हटा दिया गया है
मोहम्मद सलाह

10

ViewDidLoad में बस इसे लिखें

[self setNeedsStatusBarAppearanceUpdate];

बस ऐसा करो और यह काम करेगा

क्या आप यह कोशिश कर सकते हैं

Set UIViewControllerBasedStatusBarAppearance to NO.
Call [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];

एक और बात मैंने आपके प्रश्न में देखी है कि आपने इस तरह से विधि लिखी है

 -(void)UIStatusBarStyle PreferredStatusBarStyle ()
        {
            return UIStatusBarStyle.LightContent;
        }

लेकिन यह इस तरह होना चाहिए

-(UIStatusBarStyle)preferredStatusBarStyle{ 
    return UIStatusBarStyleLightContent; 
} 

इससे पसंदीदास्टैटसबर्टल विधि कहा जाता है, लेकिन फिर भी स्थिति पट्टी काली है।
एंड्रयू स्मिथ

कृपया मेरे अपडेट किए गए
उत्तर को देखें..मुझे

मेरा मूल प्रश्न स्पष्ट रूप से कहता है कि मुझे स्टेटस बार के नियंत्रण को देखने की आवश्यकता है।
एंड्रयू स्मिथ

क्या आप मेरे अद्यतन प्रश्न के संदर्भ में कृपया अपना कोड देख सकते हैं?
उपयोगकर्ता 1531343

1
[self setNeedsStatusBarAppearanceUpdate];इतनी बढ़िया विधि, धन्यवाद!
सुपरटेकनोफॉफ़

6

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

इसलिए मैंने नेविगेशन कंट्रोलर को उपवर्ग में शामिल किया और पसंदीदास्टैटबर्सेल्टी को अधिग्रहित किया। यदि वर्तमान दृश्य ViewContorller StatusBarStyleHandler को लागू करता है, तो मैं स्टाइल के रूप में उपयोग किए जाने वाले मूल्य के लिए पूछता हूं, अगर यह नहीं है कि मैं सिर्फ एक डिफ़ॉल्ट मान वापस करता हूं।

जिस तरह से आप स्टेटस बार उपस्थिति के अपडेट को ट्रिगर करते हैं वह कॉलिंग द्वारा होता है setNeedsStatusBarAppearanceUpdateजो preferredStatusBarStyleफिर से चालू होता है और विधि के अनुसार यूआई को अपडेट करता है

public protocol StatusBarStyleHandler {
    var preferredStatusBarStyle: UIStatusBarStyle { get }
}

public class CustomNavigationCotnroller: UINavigationController {

    public override var preferredStatusBarStyle: UIStatusBarStyle {
        if let statusBarHandler = visibleViewController as? StatusBarStyleHandler {
            return statusBarHandler.preferredStatusBarStyle
        }

        return .default
    }
}

फिर उपयोग करें

public class SomeController: UIViewController, StatusBarStyleHandler {

    private var statusBarToggle = true

    // just a sample for toggling the status bar style each time method is called
    private func toggleStatusBarColor() {
        statusBarToggle = !statusBarToggle
        setNeedsStatusBarAppearanceUpdate()
    }

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

यदि आप यह बता सकते हैं कि यह समस्या क्यों और कैसे ठीक होती है, तो यह पोस्ट बहुत बेहतर होगी।

UINavigationController को उप-वर्ग के बजाय आप केवल UINavigationController के लिए एक एक्सटेंशन बना सकते हैं और उप-वर्ग के बिना एक ही परिणाम प्राप्त कर सकते हैं।
wilforeal

4

1) पूरे प्रोजेक्ट के लिए एक सेटिंग:

यदि उपलब्ध हो, तो UIViewControllerBasedStatusBarAppearanceअपनी info.plist से की-वैल्यू पेयर निकालें , या NOइसे निकाले बिना सेट करें । यदि यह आपकी info.plist में उपलब्ध नहीं है, तो कुछ भी न करें। डिफ़ॉल्ट NOइस संपत्ति के लिए है।

नीचे दिए गए कोड को अपने AppDelegate.m में जोड़ें:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
}

2) विभिन्न दृश्य नियंत्रकों के लिए अलग-अलग सेटिंग्स:

UIViewControllerBasedStatusBarAppearanceअपनी info.plist में की-वैल्यू पेयर जोड़ें और इसे सेट करें YES

यदि आपका व्यू कंट्रोलर नेविगेशन कंट्रोलर में एम्बेड नहीं है। मान लीजिए कि MyViewController है। बस अपने MyViewController.m फ़ाइल के नीचे कोड जोड़ें। यदि आपका दृश्य नियंत्रक नेविगेशन नियंत्रक में एम्बेड किया गया है, तो एक नया कोको टच क्लास बनाएं और इसे UINavigationController का उपवर्ग बनाएं। आइए बताते हैं MyNC। अपने फलक पर, दाएँ फलक पर नेविगेशन नियंत्रक दृश्य चुनें; उपयोगिताएँ -> पहचान निरीक्षक -> कस्टम वर्ग -> वर्ग, "MyNC" टाइप करें। अपने "MyNC" कोको टच क्लास के साथ स्टोरीबोर्ड व्यू को जोड़ने के बाद, अपने MyNC.m के नीचे कोड जोड़ें:

- (BOOL)prefersStatusBarHidden {
    return NO;
}

-(UIStatusBarStyle)preferredStatusBarStyle {
    return UIStatusBarStyleLightContent;
}

IOS9 UIViewControllerBasedStatusBarAppearance में डिफ़ॉल्ट रूप से लगता है कि मूल्य में हाँ है, क्योंकि मुझे इसे मैन्युअल रूप से जोड़ने की जरूरत है। ठीक से काम करने के लिए NO पर सेट करें।
मोहम्मद असीम

4

यहां तक ​​कि सभी उत्तरों के साथ मुझे अभी भी मेरे लिए सटीक समाधान नहीं मिला, लेकिन डैनियल के उत्तर के साथ शुरू हुआ। मैंने जो समाप्त किया वह था:

override var preferredStatusBarStyle: UIStatusBarStyle {
     return visibleViewController?.preferredStatusBarStyle ?? .lightContent
}

नेविगेशन नियंत्रकों में (टैब के लिए समान, सिर्फ चयनित दृश्य नियंत्रक)। और फिर यह सम्मान करेगा:

override var preferredStatusBarStyle: UIStatusBarStyle {
     return .lightContent
}

प्रत्येक दृश्य नियंत्रक में जब तक आप इसे अन्यथा सेट न करें। मुझे setNeedsStatusBarAppearanceUpdate()कहीं भी कॉल करने की आवश्यकता नहीं है , यह तब ही अपडेट होता है जब आप प्रत्येक दृश्य नियंत्रक पर पहुंचते हैं।


2
घंटों तक इससे जूझने के बाद मैं लगभग समान समाधान के साथ समाप्त हुआ।
स्कॉट जंगविर्थ

कुछ बिंदु पर यह तय हो गया है, बस प्रत्येक वीसी में पसंदीदास्टैटबर्सेल्टी का उपयोग करना मेरे लिए अब ठीक काम करता है।
एंड्रयू प्लमर

4

iOS 13 सॉल्यूशन

उच्चतम-मतदान जवाब "विरासत" कोड का उपयोग करता है

barStyleसंपत्ति सेट करना अब (iOS 13+) "विरासत अनुकूलन" माना जाता है। Apple के अनुसार ,

IOS 13 और बाद में, standardAppearance, CompactAppearance, और ScrollEdgeAppearance गुणों का उपयोग करके अपने नेविगेशन बार को अनुकूलित करें। आप सीधे अपने नेविगेशन बार की उपस्थिति को अनुकूलित करने के लिए इन विरासत एक्सेसरों का उपयोग करना जारी रख सकते हैं, लेकिन आपको अलग-अलग बार कॉन्फ़िगरेशन के लिए उपस्थिति को अपडेट करना होगा।

अपने प्रयास के बारे में - आप सही रास्ते पर थे!

UINavigationControllerUIViewController(जो of जानता था) का उपवर्ग है !

इसलिए, जब नेविगेशन नियंत्रकों में एम्बेडेड दृश्य नियंत्रक प्रस्तुत करते हैं, तो आप वास्तव में एम्बेडेड दृश्य नियंत्रक प्रस्तुत नहीं कर रहे हैं; आप नेविगेशन नियंत्रकों को प्रस्तुत कर रहे हैं! UINavigationController, के उपवर्ग के रूप में UIViewController, विरासत में मिलता है preferredStatusBarStyleऔर childForStatusBarStyle, जिसे आप इच्छानुसार सेट कर सकते हैं।

निम्न विधियों में से कोई भी कार्य करना चाहिए:

  1. preferredStatusBarStyleभीतर ओवरराइड करेंUINavigationController

    • preferredStatusBarStyle( doc ) - व्यू कंट्रोलर के लिए पसंदीदा स्टेटस बार स्टाइल
    • उपवर्ग या विस्तार UINavigationController

      class MyNavigationController: UINavigationController {
          override var preferredStatusBarStyle: UIStatusBarStyle {
              .lightContent
          }
      }

      या

      extension UINavigationController {
          open override var preferredStatusBarStyle: UIStatusBarStyle {
              .lightContent
          }
      }
  2. childForStatusBarStyleभीतर ओवरराइड करेंUINavigationController

    • childForStatusBarStyle( doc ) - जब स्थिति बार शैली के निर्धारण के लिए सिस्टम को व्यू कंट्रोलर की आवश्यकता हो, तब कॉल किया जाता है
    • Apple के प्रलेखन के अनुसार,

      "यदि आपका कंटेनर व्यू कंट्रोलर अपने चाइल्ड व्यू कंट्रोलर में से किसी एक से अपनी स्टेटस बार शैली प्राप्त करता है, तो [इस प्रॉपर्टी को ओवरराइड करें] और उस चाइल्ड व्यू कंट्रोलर को लौटा दें। यदि आप शून्य पर लौटते हैं या इस विधि को ओवरराइड नहीं करते हैं, तो सेल्फ के लिए स्टेटस बार स्टाइल का उपयोग किया जाता है। । यदि इस विधि से वापसी मान बदलता है, तो setNeedsStatusBarAppearanceUpdate () विधि को कॉल करें। "

    • दूसरे शब्दों में, यदि आप यहां समाधान 3 को लागू नहीं करते हैं, तो सिस्टम वापस समाधान 2 से ऊपर आएगा।
    • उपवर्ग या विस्तार UINavigationController

      class MyNavigationController: UINavigationController {
          override var childForStatusBarStyle: UIViewController? {
              topViewController
          }
      }

      या

      extension UINavigationController {    
          open override var childForStatusBarStyle: UIViewController? {
              topViewController
          }
      }
    • आप ऊपर जैसा भी दृश्य नियंत्रक लौटा सकते हैं। मैं निम्नलिखित में से एक की सलाह देता हूं:

      • topViewController(of UINavigationController) ( doc ) - नेविगेशन स्टैक के शीर्ष पर दृश्य नियंत्रक
      • visibleViewController(of UINavigationController) ( doc ) - नेविगेशन इंटरफ़ेस में वर्तमान में दृश्यमान दृश्य से जुड़ा व्यू कंट्रोलर (संकेत: इसमें "एक व्यू कंट्रोलर शामिल किया जा सकता है जिसे नेविगेशन कंट्रोलर के ऊपर मामूली रूप से प्रस्तुत किया गया था")

नोट: यदि आप उपवर्ग का निर्णय लेते हैं UINavigationController, तो उस वर्ग को आईबी में पहचान निरीक्षक के माध्यम से अपने नौसेना नियंत्रकों के लिए लागू करना याद रखें।

PS मेरा कोड स्विफ्ट 5.1 सिंटैक्स ift का उपयोग करता है


1
बहुत पूरा जवाब, धन्यवाद! इसके अलावा, आईओएस 13 पर मैंने कुछ समय के लिए संघर्ष किया, .defaultशैली अंधेरे मोड को ध्यान में रखती है और इसे प्रलेखित नहीं किया जाता है, इसलिए यदि आप पिछले iOS संस्करणों का समर्थन कर रहे हैं if #available(iOS 13, *) { return .darkContent } else { return .default }तो आप जोड़ सकते हैं यदि आप स्थिति बार शैली को मैन्युअल रूप से सेटअप करने की कोशिश कर रहे हैं। स्टेटस बार के पीछे का रंग और वह रंग "ब्राइट" है।
वाल्कानिया

1
ध्यान दें कि ओवरराइड
वर्जन

क्योंकि स्विफ्ट में वस्तुनिष्ठ C वर्गों को उद्देश्य C श्रेणियों के माध्यम से लागू किया गया है। उद्देश्य सी श्रेणियों के माध्यम से अधिभावी तरीकों की सिफारिश नहीं की जाती है और टूटने की संभावना है। देखें stackoverflow.com/a/38274660/2438634
मार्क Etcheverry

हालांकि UINavigationController को ओवरराइड करने से निश्चित रूप से काम होता है, यह Apple की तरफ बग की तरह दिखता है कि यह डिफ़ॉल्ट रूप से अपने topViewController को वापस करके चाइल्डफ़ॉरस्टैटसबर्सेल्टी नहीं करता है। उदाहरण के लिए UITabBarController अपने टैब के लिए ऐसा करती है। मेरे लिए, कोई कारण नहीं है कि UINavigationController, अपने वास्तविक यूआई को पेश करने के बजाय "वास्तविक" दृश्य नियंत्रकों की मेजबानी के लिए कड़ाई से कंटेनर नियंत्रक होने के नाते, उन स्टेटस बार शैलियों को "खाना" चाहिए। Apple के लिए एक रडार बनाएंगे।
इगोर वासिलेव

1

यदि आप स्प्लैशस्क्रीन के दौरान स्टेटसबार को छिपाना चाहते हैं, लेकिन स्टाइल को लाइट कंटेंट में बदलना चाहते हैं (स्टेटसबर्नलिस्ट्रीहाइड्ड ऑन प्लिस्ट को स्टेटसबार को स्प्लैश पर छिपाने के लिए NO होना चाहिए), तो आप इसे ऐपडेलगेट के didFinishLaunchingWithOptions मेथड में बदल सकते हैं।

[[UIApplication sharedApplication]setStatusBarHidden:NO withAnimation:UIStatusBarAnimationSlide];
[[UIApplication sharedApplication]setStatusBarStyle:UIStatusBarStyleLightContent];

1

तेज उदाहरण

AppDelegate.swift में

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: NSDictionary?) -> Bool {
    UIApplication.sharedApplication().statusBarStyle = UIStatusBarStyle.LightContent;

    return true
}

info.plist सेट में देखें नियंत्रक-आधारित स्थिति बार उपस्थिति: नहीं


1

यदि आप उपयोग कर रहे हैं NavigationController, तो आप उप-वर्ग कर सकते हैं NavigationControllerताकि यह अपने बच्चे को देखने के नियंत्रक को सुरक्षित रखे

// MyCustomNavigationController

- (NSUInteger)supportedInterfaceOrientations {
    UIViewController *viewControllerToAsk = [self findChildVC];
    return [viewControllerToAsk supportedInterfaceOrientations];
}

- (BOOL)shouldAutorotate {
    UIViewController *viewControllerToAsk = [self findChildVC];
    return [viewControllerToAsk shouldAutorotate];
}

- (UIStatusBarStyle)preferredStatusBarStyle {
    UIViewController *viewControllerToAsk = [self findChildVC];
    return [viewControllerToAsk preferredStatusBarStyle];
}

- (UIViewController *)findChildVC {
    return self.viewControllers.firstObject;
}

1

स्विफ्ट 4.2

extension UITabBarController {
    open override var childForStatusBarStyle: UIViewController? {
        return selectedViewController
    }
}

extension UINavigationController {
    open override var childForStatusBarStyle: UIViewController? {
        return visibleViewController
    }
}

ध्यान दें कि ओवरराइड
वर्जन

@MarcEtcheverry तो, आपने जवाब को क्यों नीचा दिखाया? यह अजीब लगता है।
व्याचेस्लाव

क्योंकि स्विफ्ट में वस्तुनिष्ठ C वर्गों को उद्देश्य C श्रेणियों के माध्यम से लागू किया गया है। उद्देश्य सी श्रेणियों के माध्यम से अधिभावी तरीकों की सिफारिश नहीं की जाती है और टूटने की संभावना है। देखें stackoverflow.com/a/38274660/2438634
मार्क Etcheverry

@MarcEtcheverry 'अनुशंसित नहीं!' = 'इसका उपयोग कभी न करें!'। jul2018 के लिए उत्तर सही था। यहां तक ​​कि यह जवाब अप-टू-डेट नहीं है, यह इसे कम करने का कारण नहीं है। मैं भविष्य को नहीं देख सकता
व्यस्कलेव

0

आप स्टेटस बार स्टाइल सेट कर सकते हैं। यह IOS 6 और नीचे की तरह स्टेटस बार जैसा होगा।
इस तरीके को अपने व्यू कंट्रोलर में पेस्ट करें

-(UIStatusBarStyle)preferredStatusBarStyle{
    return UIStatusBarStyleBlackOpaque;
}

और इस विधि को देखने से इस तरह लोड किया था

if([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0f)
    {
       [self setNeedsStatusBarAppearanceUpdate];
    }

क्या आपका मतलब [self setStatusBarNeedsUpdate]दूसरे ब्लॉक में है? (या कुछ और कम से कम)।
mxcl

0

मैं केवल एक विशिष्ट मामले के लिए एक नोट जोड़ना चाहता हूं जिसका मैंने सामना किया। मेरे पास अपने ऐप में एक और UIWindow था जो हर समय मेरे ऐप पर तैरता रहता है। ऐसा करने से काम करने के लिए ऊपर दिए गए समाधान में से कोई भी नहीं हुआ, और मुझे यकीन नहीं है कि क्यों! मैंने जो कुछ देखा है, वह यह है कि नए UIWindow में मेरा ViewController उसी का कारण था! और अगर मैं स्टेटस बार स्टाइल बदलना चाहता था तो मुझे नए UIWindow के उस व्यू कंट्रोलर में करना होगा।

यह नोट दूसरों की मदद कर सकता है जिनके पास समान संरचना है! तो मूल रूप से आप नए UIWindow के ViewController में ऊपर वर्णित समाधान लागू कर सकते हैं।

फिर से यह एक विशिष्ट मामला है।

धन्यवाद


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