J'ai du mal à changer la taille de ma présentation popover. Voici ce que j'ai jusqu'à présent
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)
}
}
}
Jusqu'à présent, tout cela ne fait que centrer le popover et supprimer la flèche, ce qui est bien. mais il ne redimensionne pas le conteneur. toute aide serait grandement appréciée. Je vous remercie.
lorsque j'utilise PreferredContentSize, j'obtiens l'erreur "Impossible d'attribuer à la propriété: 'PreferredContentSize' est immuable"
Définissez la taille de contenu préférée sur le contrôleur de vue présenté et non sur 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)
}
}
Je n'utilise pas de story-boards. Je viens de présenter un UINavigationController dans le popover:
self.present(popoverNavigationController!, animated: true) {}
La façon de redimensionner la taille de la fenêtre contextuelle lorsqu'un nouveau contrôleur de vue est poussé, il suffit de changer la taille préférée du contenu avant de le pousser. Par exemple:
let newViewController = NewViewController()
popoverNavigationController!.preferredContentSize = CGSize(width: 348, height: 400)
popoverNavigationController!.pushViewController(newViewController, animated: true)
Le problème est lorsque nous essayons de redimensionner le popover lorsque nous ouvrons un contrôleur de vue.
Si vous utilisez viewWillDisappear du contrôleur de vue actuel pour modifier la taille de contenu préférée du popover, le popover se redimensionnera mais une fois le contrôleur de vue sauté. Cela signifie que l'animation a un retard.
Vous devez modifier le PreferredContentSize avant d'exécuter popViewController. Cela signifie que vous devez créer un bouton de retour personnalisé dans la barre de navigation comme cela est expliqué ici . Il s'agit de l'implémentation mise à jour pour Swift 4:
self.navigationItem.hidesBackButton = true
let newBackButton = UIBarButtonItem(title: "Back", style: .plain, target: self, action: #selector(CurrentViewController.backButtonTapped(sender:)))
self.navigationItem.leftBarButtonItem = newBackButton
Et exécutez le code suivant lorsque vous appuyez sur le nouveau bouton Précédent:
@objc func backButtonTapped(sender: UIBarButtonItem) {
self.navigationController?.preferredContentSize = CGSize(width: 348, height: 200)
self.navigationController?.popViewController(animated: true)
}
Fondamentalement, le PreferredContentSize doit être changé avant de pousser et de faire sauter le contrôleur de vue.
Les réponses ci-dessus sont correctes, ce qui indique l'utilisation de preferredContentSize
, mais la chose la plus importante est d'implémenter le protocole UIPopoverPresentationControllerDelegate
et d'implémenter la méthode ci-dessous sinon cela ne changera pas la taille du contenu comme prévu.
func adaptivePresentationStyle(for controller: UIPresentationController) -> UIModalPresentationStyle {
return UIModalPresentationStyle.none
}