2015-05-21 6 views
24

मैं हमेशा सभी डिवाइसों और सभी ओरिएंटेशन पर एक पॉपओवर में ViewController प्रस्तुत करना चाहता हूं। मैंने UIPopoverPresentationControllerDelegate को अपनाने और sourceView और sourceRect को सेट करके इसे पूरा करने का प्रयास किया।आईफोन 6 प्लस के लिए UIModalPresentationPopover लैंडस्केप में प्रदर्शित नहीं करता है

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

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
let popoverPresentationController = segue.destinationViewController.popoverPresentationController 
popoverPresentationController?.delegate = self 
popoverPresentationController?.sourceView = self.titleLabel!.superview 
popoverPresentationController?.sourceRect = self.titleLabel!.frame } 

func adaptivePresentationStyleForPresentationController(controller: UIPresentationController) -> UIModalPresentationStyle { 
return UIModalPresentationStyle.None } 

सभी डिवाइस iOS 8.2 के तहत कर रहे या उच्चतर

उत्तर

57

नई adaptivePresentationStyleForPresentationController:traitCollection: विधि को लागू करें UIAdaptivePresentationControllerDelegate की:

- (UIModalPresentationStyle)adaptivePresentationStyleForPresentationController:(UIPresentationController *)controller traitCollection:(UITraitCollection *)traitCollection { 
    // This method is called in iOS 8.3 or later regardless of trait collection, in which case use the original presentation style (UIModalPresentationNone signals no adaptation) 
    return UIModalPresentationNone; 
} 

UIModalPresentationNone मूल prese उपयोग करने के लिए प्रस्तुति नियंत्रक बताता है ntation शैली जो आपके मामले में एक पॉपओवर प्रदर्शित करेगा।

+1

को सुरक्षित/बंद करने के लिए नेविबार के बिना दिखा रहा है! मैं भूल गया कि प्रतिनिधि विधि 8.3 के लिए बदल गई है। –

+1

@PetahChristian धन्यवाद! हाँ काफी शांत परिवर्तन था और एपीआई diffs के अलावा अन्य दस्तावेज प्रतीत नहीं होता है। – Joshua

+0

@ जोशुआ हाँ! मैंने कार्यान्वित किया - (UIModalPresentationStyle) अनुकूली प्रस्तुति स्टाइलफोर प्रस्तुति नियंत्रक: (यूआईपी प्रतिनिधित्व कंट्रोलर *) नियंत्रक { वापसी UIModalPresentationNone; } लेकिन नई एपीआई मेरी समस्या का समाधान करती है, धन्यवाद श्रीमान! – Loegic

1

एप्पल इसके आकार वर्ग के आधार पर उस तरह से व्यवहार करने के लिए iPhone 6 Plus प्रस्तुति तैयार किया गया है,।

आईफोन 6 प्लस पर मोडल प्रस्तुति को रोकने के लिए, आपको विशेषता संग्रह (क्षैतिज आकार) को ओवरराइड करना होगा।

आप प्रस्तुति नियंत्रक के लिए overrideTraitCollection गुण सेट करने के लिए सक्षम होना चाहिए: (!। उद्देश्य सी के लिए खेद है कि मैं नहीं सीखा है स्विफ्ट अभी तक)

presentedVC.presentationController.overrideTraitCollection = [UITraitCollection traitCollectionWithHorizontalSizeClass:UIUserInterfaceSizeClassCompact]; 

+0

मैं माफी चाहता हूँ, लेकिन यह मेरे लिए काम नहीं किया, मैं traitCollection ओवरराइड नहीं पा रहा हूँ , "मतलब होना" पॉपओवर अभी भी आईफोन 6 पर पेज शीट के रूप में प्रस्तुत किया गया है और केवल – Loegic

+0

लैंडस्केप किया गया है, जबकि चिंतित है, मेरे पास इस सुबह की जांच करने के लिए समय नहीं है। मैं इस पर कुछ ध्यान आकर्षित करने के लिए सवाल पर एक वरदान प्रदान कर सकता हूं। :) –

+0

मैंने इसे देखा, धन्यवाद :) विशेषता का चयन ओवरराइड एक अच्छा विचार प्रतीत होता था, लेकिन ऐसा अनदेखा प्रतीत होता है। – Loegic

2

स्विफ्ट 3 में, आप मूल adaptivePresentationStyle पद्धति लागू करता है, तो बस इस कोड को जोड़ने काम करता है:

func adaptivePresentationStyle(for controller: UIPresentationController, traitCollection: UITraitCollection) -> UIModalPresentationStyle { 
    return adaptivePresentationStyle(for: controller) 
} 
संबंधित मुद्दे