IOS 13 में प्रस्तुत दृश्य नियंत्रक की इंटरैक्टिव बर्खास्तगी को अक्षम करें


135

iOS 13 ने सामान्य रूप से प्रस्तुत किए गए व्यू कंट्रोलर्स के लिए modalPresentationStyle .pageSheet(और इसके भाई .formSheet) की एक नई डिज़ाइन पेश की है ...

IOS 13 में नई स्लाइडिंग मोडल प्रस्तुति

… और हम इन शीट्स को प्रस्तुत व्यू कंट्रोलर को (इंटरएक्टिव बर्खास्तगी) को खिसका कर खारिज कर सकते हैं । यद्यपि नया "पुल-टू-ए-खारिज" सुविधा बहुत उपयोगी है, यह हमेशा वांछनीय नहीं हो सकता है।

प्रश्न: हम इंटरैक्टिव बर्खास्तगी को कैसे बंद कर सकते हैं? - ध्यान रखें कि हम प्रस्तुति शैली को समान रखते हैं।



6
@MehulThakkar यह एक अलग सवाल है।
जैकब ट्रहला

जवाबों:


240

विकल्प 1:

viewController.isModalInPresentation = true

विकलांग इंटरैक्टिव बर्खास्तगी

(निष्क्रिय इंटरैक्टिव .pageSheetबर्खास्तगी इस तरह से कार्य करता है।)

  • IOS 13 के बाद से, UIViewControllerएक नई संपत्ति शामिल है जिसे इंटरएक्टिव बर्खास्तगी को रोकने के लिए isModalInPresentationसेट किया जाना चाहिए true
  • यह मूल रूप से कंट्रोलर की सीमा के बाहर की घटनाओं को अनदेखा करता है। इस बात को ध्यान में रखें कि यदि आप न केवल स्वचालित शैली का उपयोग कर रहे हैं, बल्कि प्रस्तुति शैली .popoverआदि भी ।
  • यह गुण falseडिफ़ॉल्ट रूप से है।

से सरकारी डॉक्स : अगर true, UIKit दृश्य नियंत्रक के सीमा से रोकती है बाहर की घटनाओं पर ध्यान नहीं देता दृश्य नियंत्रक के इंटरैक्टिव बर्खास्तगी, जबकि यह परदे पर है।


विकल्प 2:

func presentationControllerShouldDismiss(_ presentationController: UIPresentationController) -> Bool {
    return false
}
  • IOS 13 के बाद से UIAdaptivePresentationControllerDelegateइसमें एक नया तरीका शामिल है presentationControllerShouldDismiss
  • इस पद्धति को केवल तभी कहा जाता है जब प्रस्तुत दृश्य नियंत्रक को प्रोग्रामेटिक रूप से खारिज नहीं किया जाता है और इसकी isModalInPresentationसंपत्ति निर्धारित की जाती है false

टिप: प्रेजेंटेशन को कंट्रोलर के प्रतिनिधि को मत भूलना।


2
यदि प्रस्तुत दृश्य नियंत्रक एक नेविगेशन नियंत्रक है, तो आप या तो isModalInPresentationनेविगेशन नियंत्रक या नेविगेशन स्टैक में दिखाए गए व्यक्तिगत दृश्य नियंत्रकों पर सेट कर सकते हैं । उत्तरार्द्ध आपको स्क्रीन-दर-स्क्रीन आधार पर चुनने की अनुमति देता है कि क्या इंटरैक्टिव बर्खास्तगी संभव है। खोज नियंत्रकों के साथ सावधान, वे व्यक्तिगत दृश्य नियंत्रक (लेकिन नेविगेशन नियंत्रक) पर पूर्वता लेते हैं। मेरे ब्लॉग पोस्ट में अधिक जानकारी: medium.com/@hacknicity/…
ज्योफ हैकवर्थ

1
ध्यान रखें कि यदि आपके वीसी को एक पॉपओवर के रूप में प्रस्तुत किया जाता है, तो यह
पॉपओवर

4
उद्देश्य-सी:viewController.modalInPresentation = YES;
क्वार्क

3
किसी को भी इस झंडे को स्थापित करने के लिए काम करने के लिए मिला UIImagePickerController? हमारे लिए ऐसा लगता है कि UIImagePickerControllerयह इसे अनदेखा कर रहा है और इसलिए इसे स्वाइप जेस्चर से खारिज किया जा सकता है। शायद यह एक iOS 13 बग है।
पैट्रिकडॉटस्टार

4
जब presentationControllerShouldDismiss(_ presentationController: UIPresentationController)झूठा वापस आता है, presentationControllerDidAttemptToDismiss(_ presentationController: UIPresentationController)तो इसे कहा जाता है ताकि आप उपयोगकर्ता द्वारा डेटा दर्ज किए जाने पर एक पुष्टिकरण संवाद जोड़ सकें।
नील

66
  1. यदि आप वैसा ही व्यवहार चाहते हैं जैसा कि पिछले iOS संस्करण (<iOS13) में फुलस्क्रीन में मॉडल प्रस्तुति की तरह है, तो बस अपने गंतव्य दृश्य नियंत्रक की प्रस्तुति शैली सेट करें UIModalPresentationStyle.fullScreen

    let someViewController = \*VIEW CONTROLLER*\
    someViewController.modalPresentationStyle = .fullScreen
    

    और अगर आप स्टोरीबोर्ड का उपयोग कर रहे बस segua का चयन करें और चयन Full Screenके रूप में Presentationलटकती।

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

  2. यदि आप सिर्फ इंटरएक्टिव बर्खास्तगी को निष्क्रिय करना चाहते हैं और नई प्रस्तुति शैली सेट UIViewControllerसंपत्ति isModalInPresentationको रखना चाहते हैं true

    if #available(iOS 13.0, *) {
        someViewController.isModalInPresentation = true // available in IOS13
    }
    

यह {नियंत्रक .isModalInPresentation = true} का उपयोग करने से बेहतर काम करता है।
मैक्सिम फ़िरोज़ॉफ़

8

संपत्ति isModalInPresentationमदद कर सकती है।

प्रलेखन से:

जब आप इसे सेट करते हैं true, तो UIKit व्यू कंट्रोलर की सीमा के बाहर की घटनाओं को अनदेखा कर देता है और यह ऑनस्क्रीन होने पर व्यू कंट्रोलर की इंटरएक्टिव बर्खास्तगी को रोकता है।

आप इसे इस तरह से उपयोग कर सकते हैं:

let controller = MyViewController()
controller.isModalInPresentation = true
self.present(controller, animated: true, completion: nil)

5

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

नेविगेशन नियंत्रक के लिए प्रस्तुति विकल्प दिखाते हुए निरीक्षक को शामिल करें


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