comment faire pour centrer un popoverview en swift
J'ai le code suivant pour afficher une popoverview (boîte de dialogue) sans flèche, qui fonctionne très bien. Le seul problème, c'est que le dialogue est affiché en haut à gauche (IPad). Je voudrais centrer l'affichage sur l'écran.
Les éléments à modifier ou à ajouter dans mon code ? :
func show_help(){
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let controller = storyboard.instantiateViewControllerWithIdentifier("Help") as! UIViewController
controller.modalPresentationStyle = UIModalPresentationStyle.popover
let popoverPresentationController = controller.popoverPresentationController
//result is an optional (but should not be nil if modalPresentationStyle is popover)
if let _popoverPresentationController = popoverPresentationController {
//set the view from which to pop up
_popoverPresentationController.sourceView = self.view;
_popoverPresentationController.permittedArrowDirections = UIPopoverArrowDirection.allZeros;
//present (id iPhone it is a modal automatic full screen)
self.presentViewController(controller, animated: true, completion: nil)
}
}
D'Autres Infos
De mon point de vue, qui est lié à mon viewcontroller j'ai défini la taille désirée comme ceci:
override func viewDidLoad() {
let dialogheigth:CGFloat = self.view.frame.height * 0.5;
let dialogwidth:CGFloat = self.view.frame.width * 0.5;
self.preferredContentSize = CGSizeMake(dialogwidth,dialogheigth);
}
- pouvez-vous juste après la capture d'écran? Et puis je sais que c'est poping entièrement?
- Merci beaucoup pour votre aide. J'ai juste ajouté une capture d'écran et code de mon point de vue. Le bleu est la couleur de l'arrière-plan. Le blanc est ma liste. Le code supplémentaire montre, que j'ai mis la taille désirée de la liste.
- Normalement, vous devriez utiliser
popoverLayoutMargins
dans ce cas. Mais regarde ici: stackoverflow.com/a/26632329/826716 , il est cassé dans iOS 8.
Vous devez vous connecter pour publier un commentaire.
Vous devez fournir la source rect de la liste.
À partir de la documentation d'apple: la source rect est le rectangle dans le mode spécifié dans lequel l'ancrage de la liste. Utiliser cette propriété en collaboration avec le sourceView propriété pour spécifier le point d'ancrage de la liste.
Dans votre cas, en vertu de
ajouter:
Il fera l'affaire!
popover?.permittedArrowDirections = UIPopoverArrowDirection()
autrement que la flèche pointe vers le milieu de l'écran ie liste ne couvre que la moitié de l'écran. Ma liste est générée à partir d'un robinet d'un tableViewCellVoici une mise en œuvre à l'aide de Swift 3
Basé sur Istvan
réponse
Swift 4 mise en œuvre :
Une autre façon de Swift 3 (Xcode 8, iOS 9) est-ce:
Appelé à partir de quelque part:
Fonction qui est appelée avant d'enchaîner obtient déclenché:
N'oubliez pas de régler la table de montage séquentiel des enchaînements du Type de l'attribut "Présent en tant que Liste" et l'attribut de point d'Ancrage pour une vue de votre ancienne-vue-contrôleur.
Se composent essentiellement de trois étapes (iOS 8):
Disons que vous voulez montrer une vue personnalisée pour demander une Révision de l'utilisateur.. ici la fonction
loadNibForRate()
retourne une instance deRateDialog
chargé à partir de sa plume, mais vous pouvez utiliser ici aucune façon que vous désirez pour localiser votreUIViewController
Swift 4 mise en œuvre pour le centre de Liste contrôleur
Dans iOS8, vous n'avez pas besoin d'utiliser
self.view.frame
pour calculer la largeur et la hauteur.Vous pouvez la boîte de dialogue de la hauteur et de la largeur à l'aide de la manière suivante:
Édité:
Vous pouvez également définir
contentSizeForViewInPopover
comme ci-dessous: laLaissez-moi savoir ce aide ou pas?
Dans le cas où si ça aide quelqu'un, j'ai créé une extension sur UIViewController
Utilisation:
Ceci affichera la liste au centre de l'écran.
Swift 4.1
Ici est la solution la plus simple:
Prendre une variable publique
var popover
Présent
YourViewController
comme liste, utilisez lapopover?.sourceRect
comme mentionné ci-dessous.utilisation
viewWillTransition
pour afficher les transitions de paysage et de portrait.cela vous donnera liste centre aligné à l'écran à la fois paysage et portrait. Beaucoup de flexibilité tout en utilisant la vue fractionnée pour iPad.
Ajouter mentionnés ci-dessous de la ligne de code afin de le rendre de centre.