Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

UIModalPresentationPopover for iPhone 6 Plus in landscape doesn't display popover

I want to always present a ViewController in a popover on all devices and all orientations. I tried to accomplish this by adopting the UIPopoverPresentationControllerDelegate and setting the sourceView and sourceRect.

This works very well for all devices and orientations, except the iPhone 6 Plus in landscape. In that case the view controller slides up from the bottom of the screen in a form sheet. How can I prevent that so that it will always appear in a popover?

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 } 

All device are under iOS 8.2 or higher

like image 923
Loegic Avatar asked May 21 '15 15:05

Loegic


2 Answers

Implement the new adaptivePresentationStyleForPresentationController:traitCollection: method of 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 tells the presentation controller to use the original presentation style which in your case will display a popover.

like image 197
Joshua Avatar answered Oct 04 '22 09:10

Joshua


In Swift 3, if you implemented the original adaptivePresentationStyle method, simply adding this code works:

func adaptivePresentationStyle(for controller: UIPresentationController, traitCollection: UITraitCollection) -> UIModalPresentationStyle {     return adaptivePresentationStyle(for: controller) } 
like image 39
JKaz Avatar answered Oct 04 '22 09:10

JKaz