2015-10-16 10 views
14

मेरी ऐप की स्टेटसबार शैली UIStatusBarStyleLightContent है और यह मेरे रूट व्यू कंट्रोलर में preferredStatusBarStyle के रूप में सेट है।SFSafariViewController स्टेटस बार शैली

अब मुझे एक समस्या है कि मेरे ऐप के भीतर से SFSafariViewController खोलते समय, इसे विरासत में स्टेटसबार शैली मिली है जो SFSafariViewController की सफेद पृष्ठभूमि पर हल्का और अदृश्य है।

क्या SFSafariViewController के लिए स्टेटसबार शैली सेट करने का कोई तरीका है?

पीएस मैंने SFSafariViewController को उपclass करने की कोशिश की और इस विधि को ओवरराइड किया लेकिन यह मदद नहीं करता है।

- (UIStatusBarStyle)preferredStatusBarStyle { 
    return UIStatusBarStyleDefault; 
} 

अद्यतन:

[[UIApplication sharedApplication] setStatusBarStyle:] चाल करता है, लेकिन इस विधि आईओएस 9.

+0

ऐसा लगता है कि समस्या दिखाई दी क्योंकि मैंने info.plist में YES के लिए uiviewcontroller- आधारित स्टेटस बार उपस्थिति कुंजी सेट नहीं की है। मैं दृश्य-नियंत्रक आधारित तरीके का उपयोग करने के लिए स्टेटस-बार स्टाइल कोड को फिर से लिखता हूं और सबकुछ सही काम करता है –

+0

आपको नीचे दिए गए उत्तर को स्वीकृत उत्तर के रूप में चिह्नित करना चाहिए। –

+0

@ClayEllis क्षमा करें, उस समय इसे याद किया। उत्तर के लिए धन्यवाद –

उत्तर

12

उपर्युक्त उत्तर दोनों बहुत दूर रास्ते पर जा रहे हैं। आपको SFSafariViewController सबक्लस करने की आवश्यकता नहीं है।

SFSafariViewController के उदाहरण पर बस modalPresentationCapturesStatusBarAppearance = true सेट करें और यह बाकी को अपने आप संभालेगा।

यह काम करता है क्योंकि इसका अपना डिफ़ॉल्ट preferredStatusBarStyle है, आपने अनुमान लगाया है, .default। दृश्य पदानुक्रम अभी भी स्टेटस बार उपस्थिति के लिए प्रस्तुत दृश्य नियंत्रक पर निर्भर है, इसलिए modalPresentationCapturesStatusBarAppearance से true पर सेट करके, यह रिसीवर स्टेटस बार उपस्थिति के लिए पूछेगा।

टी एल; डॉ

safariViewController.modalPresentationCapturesStatusBarAppearance = true चाल करेंगे।

+1

सबसे सुरुचिपूर्ण समाधान –

+4

के लिए धन्यवाद मेरे लिए काम नहीं करता है ... – Alex

1

कैसे उस के बारे में में पदावनत कर रहा है?

class MyCustomSafariViewController: SFSafariViewController { 

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

या निजी एपीआई - यदि आप इसका उपयोग कर सकते हैं।

+0

सुझाव के लिए धन्यवाद, लेकिन मुझे अंधेरा स्थिति बार शैली चाहिए। उत्तर अपडेट किया गया, उपclass करने की कोशिश की लेकिन यह काम नहीं करता है। निजी एपीआई –

+0

का उपयोग नहीं कर सकता है 'डीफॉल्ट' काम नहीं करता है और वास्तव में 'पसंदीदास्टैटसबर्ट स्टाइल' को कभी भी –

+7

नहीं कहा जाता है कभी भी निजी एपीआई का उपयोग करने का सुझाव नहीं देते। – Simon

6

यह सबसे अच्छा समाधान नहीं है, लेकिन यह काम करता है।

class MySafariViewContoller: SFSafariViewController { 

    override func viewWillAppear(animated: Bool) { 
     super.viewWillAppear(true) 

     UIApplication.sharedApplication().statusBarStyle = .Default 
    } 

    override func viewWillDisappear(animated: Bool) { 
     super.viewWillAppear(false) 

     UIApplication.sharedApplication().statusBarStyle = .LightContent 
    } 
} 

बदलें। डीफॉल्ट और लाइटकंटेंट जैसा आप चाहें।

+0

अच्छा समाधान, ऐप के निचले आईओएस संस्करण को 8.0 पर रखने का एक तरीका है और अभी भी (यदि उपयोग 9.0 पर है) तो उस वर्ग का उपयोग करें जो 'SFSafariViewController' से विरासत है? –

+0

मुझे मेरा जवाब मिला है '@ उपलब्ध (आईओएस 9।0, *) कक्षा MySafariViewContoller: SFSafariViewController ' –

+0

यह समाधान तब काम करता है जब' UIModalPresentationStyle' प्रॉपर्टी 'पूर्णस्क्रीन' पर सेट की जाती है और उपरोक्त @ मिट्टी-एलीस स्वीकृत उत्तर के साथ जाती है। – yohannes

4

आप एक्सटेंशन का उपयोग कर सकते हैं।

extension SFSafariViewController { 

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

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

} 
संबंधित मुद्दे