container bootstrap ios swift popover

ios - bootstrap - Cómo cambiar el tamaño de un popover



popover jquery (3)

Establezca el tamaño de contenido preferido en el controlador de vista que se presenta, no el popoverPresentationController

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) // func for popover { if segue.identifier == "popoverView" { let vc = segue.destinationViewController vc.preferredContentSize = CGSize(width: 200, height: 300) let controller = vc.popoverPresentationController controller?.delegate = self //you could set the following in your storyboard controller?.sourceView = self.view controller?.sourceRect = CGRect(x:CGRectGetMidX(self.view.bounds), y: CGRectGetMidY(self.view.bounds),width: 315,height: 230) controller?.permittedArrowDirections = UIPopoverArrowDirection(rawValue: 0) } }

Estoy teniendo problemas para cambiar el tamaño de mi presentación popover. Esto es lo que tengo hasta ahora.

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) // func for popover { if segue.identifier == "popoverView" { let vc = segue.destinationViewController let controller = vc.popoverPresentationController if controller != nil { controller?.delegate = self controller?.sourceView = self.view controller?.sourceRect = CGRect(x:CGRectGetMidX(self.view.bounds), y: CGRectGetMidY(self.view.bounds),width: 315,height: 230) controller?.permittedArrowDirections = UIPopoverArrowDirection(rawValue: 0) } } }

Hasta ahora todo lo que hace es centrar la ventana emergente y eliminar la flecha, lo cual es bueno. pero no cambia el tamaño del contenedor. Cualquier ayuda sería muy apreciada. gracias.

cuando uso preferredContentSize me sale el error "No se puede asignar a la propiedad: ''preferredContentSize'' es inmutable"


Lo arreglé a través del guión gráfico: haga clic en su controlador. Haga clic en el inspector de atributos ViewController> Check Use Preferred Explicit size y los valores de entrada. Comprobar imagen


No estoy usando guiones gráficos. Acabo de presentar un UINavigationController en la ventana emergente:

self.present(popoverNavigationController!, animated: true) {}

La forma de redimensionar el tamaño de la ventana emergente cuando se empuja un nuevo controlador de vista, es simplemente cambiar el preferredContentSize antes de presionarlo. Por ejemplo:

let newViewController = NewViewController() popoverNavigationController!.preferredContentSize = CGSize(width: 348, height: 400) popoverNavigationController!.pushViewController(newViewController, animated: true)

El problema es cuando intentamos cambiar el tamaño de la ventana emergente cuando abrimos un controlador de vista.

Si usa viewWillDisappear del controlador de vista actual para cambiar el preferredContentSize de la ventana emergente, la ventana emergente cambiará de tamaño pero después de que se abra el controlador de vista. Eso significa que la animación tiene un retraso.

Debe cambiar el preferredContentSize antes de ejecutar popViewController. Eso significa que tiene que crear un botón Atrás personalizado en la barra de navegación como se explica here . Esta es la implementación actualizada para Swift 4:

self.navigationItem.hidesBackButton = true let newBackButton = UIBarButtonItem(title: "Back", style: .plain, target: self, action: #selector(CurrentViewController.backButtonTapped(sender:))) self.navigationItem.leftBarButtonItem = newBackButton

Y ejecute el siguiente código cuando se presione el nuevo botón Atrás:

@objc func backButtonTapped(sender: UIBarButtonItem) { self.navigationController?.preferredContentSize = CGSize(width: 348, height: 200) self.navigationController?.popViewController(animated: true) }

Básicamente, el preferredContentSize se debe cambiar antes de presionar y abrir el controlador de vista.