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
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.
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)
}
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];