UIModalPresentationPopover pour iPhone 6 Plus dans le paysage n'affiche pas popover

je veux toujours un ViewController dans un popover sur tous les appareils et toutes les orientations. J'ai essayé d'accomplir ceci en adoptant le UIPopoverPresentationControllerDelegate et le réglage de l' sourceView et sourceRect.

cela fonctionne très bien pour tous les appareils et orientations, à l'exception de l'iPhone 6 Plus dans landscape. Dans ce cas le contrôleur de vue glisse vers le haut du bas de l'écran dans une feuille de forme. Comment puis-je empêcher cela pour qu'il apparaisse toujours dans un 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 }

tous les appareils sont sous iOS 8.2 ou plus

28
demandé sur Loegic 2015-05-21 18:34:21

3 réponses

implémenter le nouveau adaptivePresentationStyleForPresentationController:traitCollection: méthode 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 indique au contrôleur de présentation d'utiliser le style de présentation original qui dans votre cas affichera un popover.

60
répondu Joshua 2015-05-27 11:47:44

dans Swift 3, Si vous avez implémenté l'original adaptivePresentationStyle méthode, il suffit d'ajouter ce code fonctionne:

func adaptivePresentationStyle(for controller: UIPresentationController, traitCollection: UITraitCollection) -> UIModalPresentationStyle {
    return adaptivePresentationStyle(for: controller)
}
4
répondu JKaz 2016-11-24 20:20:50

Apple a conçu la présentation iPhone 6 Plus pour se comporter de cette façon, en fonction de sa classe de taille.

pour empêcher la présentation modale sur l'iPhone 6 Plus, vous aurez à outrepasser la collection trait (taille horizontale).

vous devriez pouvoir définir le overrideTraitCollection propriété pour le contrôleur de présentation:

presentedVC.presentationController.overrideTraitCollection = [UITraitCollection traitCollectionWithHorizontalSizeClass:UIUserInterfaceSizeClassCompact];
1
répondu 2015-05-22 15:57:54