UIModalPresentationPopover for iPhone 6 Plus in landscape doesn't display popover
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.
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)}
Apple designed the iPhone 6 Plus presentation to behave that way, based on its size class.
To prevent the modal presentation on the iPhone 6 Plus, you'll have to override the trait collection (horizontal size).
You should be able to set the overrideTraitCollection
property for the presentation controller:
presentedVC.presentationController.overrideTraitCollection = [UITraitCollection traitCollectionWithHorizontalSizeClass:UIUserInterfaceSizeClassCompact];
(Sorry for the Objective C! I haven't learned Swift yet.)