rotar rotacion quiero que plus pantalla gire girar gira desactivar ios iphone ios8 iphone-6-plus uimodalpresentationstyle

ios - rotacion - UIModalPresentationPopover para iPhone 6 Plus en modo horizontal no muestra popover



rotar pantalla iphone 6 (3)

Quiero presentar siempre un ViewController en una ventana emergente en todos los dispositivos y todas las orientaciones. Intenté lograr esto adoptando el UIPopoverPresentationControllerDelegate y configurando sourceView y sourceRect .

Esto funciona muy bien para todos los dispositivos y orientaciones, excepto el iPhone 6 Plus en modo horizontal. En ese caso, el controlador de vista se desliza hacia arriba desde la parte inferior de la pantalla en una hoja de formulario. ¿Cómo puedo evitarlo para que siempre aparezca en una ventana emergente?

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 }

Todos los dispositivos están bajo iOS 8.2 o superior


Apple diseñó la presentación del iPhone 6 Plus para comportarse de esa manera, en función de su tamaño.

Para evitar la presentación modal en el iPhone 6 Plus, deberá anular la colección de rasgos (tamaño horizontal).

Debería poder establecer la propiedad overrideTraitCollection para el controlador de presentación:

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

(¡Perdón por el Objetivo C! Aún no he aprendido Swift).


En Swift 3, si implementó el método original adaptivePresentationStyle , simplemente agregando este código funciona:

func adaptivePresentationStyle(for controller: UIPresentationController, traitCollection: UITraitCollection) -> UIModalPresentationStyle { return adaptivePresentationStyle(for: controller) }


Implemente el nuevo adaptivePresentationStyleForPresentationController:traitCollection: método de 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 le dice al controlador de presentación que use el estilo de presentación original, que en su caso mostrará una ventana emergente.