2016-11-04 7 views
11

में काम नहीं कर रहा है मैं एक UIViewController पर रोटेशन को रोकने की कोशिश कर रहा हूं और मैं इसे प्राप्त नहीं कर सकता।ओवरराइड करना चाहिए ऑटोटोटेट स्विफ्ट 3

मैं कुछ इस तरह कर रहा हूँ:

open override var shouldAutorotate: Bool { 
    get { 
     return false 
    } 
} 

override var supportedInterfaceOrientations: UIInterfaceOrientationMask { 
    get { 
     return .portrait 
    } 
} 

और UIViewControler चित्र घूर्णन। UIViewController एक UINavigationController के अंदर मामूली रूप से खोला गया है।

मैंने यहां से बहुत से प्रश्न देखे हैं और कोई भी जवाब मेरे लिए काम नहीं करता है।

स्विफ्ट 2 में मैं shouldAutorotate ओवरराइड करता था लेकिन स्विफ्ट 3 में यह फ़ंक्शन अब मौजूद नहीं है।

मैं स्विफ्ट 3 में क्या कर सकता हूं जो मैं स्विफ्ट 2 में करता था?

+1

आपकी 'समर्थित इंटरफेसऑरिएंटेशन' कैसा दिखता है? – matt

+0

@ मैट मैंने प्रश्न संपादित किया कि – pableiros

+0

धन्यवाद। ठीक है, इसलिए यदि यह एक प्रस्तुत दृश्य नियंत्रक है, तो यह केवल पोर्ट्रेट में दिखाई देना चाहिए और वहां रहना चाहिए। यदि ऐसा नहीं हो रहा है, तो कहानी के लिए और भी कुछ होना चाहिए। क्या आप इस दृश्य नियंत्रक को _how_ का वर्णन कर सकते हैं? मुझे साबित करें कि यह एक पूर्णस्क्रीन शीर्ष-स्तर प्रस्तुत दृश्य नियंत्रक है। – matt

उत्तर

22

मुझे नहीं पता कि सवाल को बंद करने का वोट क्यों है यदि मैं इस व्यवहार को कई बार पुन: उत्पन्न कर सकता हूं। UIViewControllerUINavigationController के अंदर मामूली रूप से खोला गया है।

यही समस्या मैंने हल करने के लिए किया था।

मैं इस वर्ग बना सकते हैं और मैं UINavigationController करने के लिए सेट मौजूद है कि UIViewController कि मैं रोकना चाहते हैं, बारी बारी से करने

class NavigationController: UINavigationController { 

    override var shouldAutorotate: Bool { 
     return false 
    } 

    override var supportedInterfaceOrientations: UIInterfaceOrientationMask { 
     return .portrait 
    } 

} 

और thats यह, यह काम करता है के लिए मुझे

+0

काम करता है लेकिन क्या होगा यदि आप केवल एक विशिष्ट UIViewController चाहते हैं घूमने के लिए नहीं और पूरे नेविगेशन ढेर नहीं? यह उत्तर एक बेहतर जैसा प्रतीत होता है: http://stackoverflow.com/a/39805665 –

+0

@ रॉयशिलक्रॉट यह ठीक है, सवाल का लक्ष्य था कि एक नेविगेशन नियंत्रक के अंदर एक दृश्य नियंत्रक के घूर्णन को कैसे रोकें, न कि कैसे रोकें एक संपूर्ण नेविगेशन स्टैक – pableiros

3

AppDelegate लिए इस कोड को जोड़ें। तेज

var orientationLock = UIInterfaceOrientationMask.all 
func application(_ application: UIApplication, supportedInterfaceOrientationsFor window: UIWindow?) -> UIInterfaceOrientationMask { 
    return self.orientationLock 
} 

struct AppUtility { 
    static func lockOrientation(_ orientation: UIInterfaceOrientationMask) { 
     if let delegate = UIApplication.shared.delegate as? AppDelegate { 
      delegate.orientationLock = orientation 
     } 
    } 

    static func lockOrientation(_ orientation: UIInterfaceOrientationMask, andRotateTo rotateOrientation:UIInterfaceOrientation) { 
     self.lockOrientation(orientation) 
     UIDevice.current.setValue(rotateOrientation.rawValue, forKey: "orientation") 
    } 
} 

ViewController है कि आप एक उन्मुखीकरण बाध्य करना चाहते हैं में जोड़ें:

override func viewDidAppear(_ animated: Bool) { 
    super.viewDidAppear(animated) 
    //let value = UIInterfaceOrientation.landscapeLeft.rawValue 
    //UIDevice.current.setValue(value, forKey: "orientation") 


    AppDelegate.AppUtility.lockOrientation(.landscapeLeft) 

} 
+0

के अंदर एक विशिष्ट दृश्य नियंत्रक यह मेरे लिए काम करता है, लेकिन स्वीकृत उत्तर बहुत साफ है और यह भी काम करता है।वहाँ एक विशिष्ट परिदृश्य जहां स्वीकार किए जाते हैं जवाब संभव नहीं है और केवल इस काम करता है? – paul