दोनों में काम करता है जो अर्द्ध पारदर्शी दृश्य नियंत्रक प्रस्तुत करता है मेरे पास निम्नलिखित कोड था जो आईओएस 7 में पूरी तरह से काम करता था।आईएसओ 7 और आईओएस 8
[UIView animateWithDuration:0.5 animations:^(void) {
self.view.alpha = 0.5;
[self.navigationController.navigationBar setAlpha:0.3];
}]; //to make the background view controller semi-transparent
UIViewController *rootViewController = [UIApplication sharedApplication].delegate.window.rootViewController;
[rootViewController setModalPresentationStyle:UIModalPresentationCurrentContext];
OverlayViewController *ctlr = [storyBoard instantiateViewControllerWithIdentifier:@"OverlayViewController"];
//present the OverlayViewController
[self presentViewController:ctlr animated:YES completion:nil];
तो मैं पृष्ठभूमि दृश्य नियंत्रक के viewWillAppear में निम्नलिखित था, पूर्ण अपारदर्शी करने के लिए अपने दृश्य वापस लौटने के लिए।
[UIView animateWithDuration:1.0 animations:^(void) {
self.view.alpha = 1.0;
[self.navigationController.view setAlpha:1.0];
}];
अब, आईओएस 8 के साथ, उपर्युक्त कोड पृष्ठभूमि को सेमी-पारदर्शी होने के लिए सेट नहीं करता है। ब्लैक रंग ओवरले व्यू कंट्रोलर से घिरा हुआ है।
मुझे ऑनलाइन मिला कि UIModalPresentationOverCurrentContext का उपयोग अपेक्षित व्यवहार देगा। यह वास्तव में करता है, लेकिन पृष्ठभूमि दृश्य नियंत्रक को दृश्य पदानुक्रम से कभी नहीं हटाया जाता है (इस व्यवहार के संदर्भ में संपादित करने के लिए संपादित: https://developer.apple.com/documentation/uikit/uimodalpresentationstyle)। तो, viewWillAppear कभी नहीं कहा जाता है, और इसलिए अर्द्ध पारदर्शिता कभी नहीं हटाई जाती है।
जाहिर है, मैं NSNotificationCenter का उपयोग करने जैसे हैक्स का सहारा ले सकता हूं और OverlayViewController को हटाए जाने पर अधिसूचना को बंद कर सकता हूं, लेकिन यह सरल होने के लिए एक चौराहे के तरीके की तरह लगता है। क्या कोई अन्य तरीका है जिसमें मैं इसे प्राप्त कर सकता हूं?
उपप्रमेय सवाल:
1) यदि UIModalPresentationOverCurrentContext एक ही तरीका है इस लक्ष्य को हासिल करने के लिए है, तो मैं सोच रहा हूँ अगर मैं कोड के दो संस्करणों डाल करने के लिए मजबूर किया जाएगा यह iOS7 और iOS8 में दोनों काम कर पाने के।
2) जाहिर है कि एक्सकोड के पुराने संस्करणों में नया enum पहचाना नहीं गया है। तो, क्या मेरी टीम को यह सुनिश्चित करने के लिए एक्सकोड 6 में अपग्रेड करना चाहिए कि वे इस कोड को चला सकें, भले ही उनका बाकी काम केवल आईओएस 7 के आसपास केंद्रित हो? या क्या आईओएस 8 के लिए आवश्यक विशेष कोड ब्लॉक को अनदेखा करने के लिए एक्सकोड के पुराने संस्करण को बताने का कोई तरीका है?
धन्यवाद। अच्छी तरह से समझाया! हमने यहां वर्णित कुछ के समान कुछ किया है। दुर्भाग्यवश, मेरे पास आपके उत्तर को ऊपर उठाने के लिए पर्याप्त प्रतिष्ठा नहीं है। – Shankar
"सुनिश्चित करें कि प्रस्तुति शैली स्टोरीबोर्ड सेग्यू के लिए डिफ़ॉल्ट पर सेट है" - धन्यवाद, यह मेरे लिए काम कर रहा है। –