Est-il possible de présenter un popover sans aucune sorte de flèches pointant quelque part?
Oui, il est possible de faire:
[self.popoverController presentPopoverFromBarButtonItem:anItem
permittedArrowDirections:0
animated:YES];
Le zéro ne représente aucune direction.
Pour iPhone et Swift 2.0, essayez celui-ci.
Code pour initier popover
initiatePopover(){
let popoverContent = self.storyboard?.instantiateViewControllerWithIdentifier("XYZController") as! XYZController
let nav = UINavigationController(rootViewController: popoverContent)
nav.modalPresentationStyle = UIModalPresentationStyle.Popover
let popover = nav.popoverPresentationController
popoverContent.preferredContentSize = CGSizeMake(250 ,200)
popover!.delegate = self
popover!.sourceView = self.view
popover!.sourceRect = CGRectMake(200,200,0,0)
popover!.permittedArrowDirections = UIPopoverArrowDirection(rawValue: 0)
self.presentViewController(nav, animated: true, completion: nil)
}
Et ajoutez ceci à votre ViewController
func adaptivePresentationStyleForPresentationController(controller: UIPresentationController) -> UIModalPresentationStyle {
return UIModalPresentationStyle.None
}
Définissez la permittedArrowDirections
à 0.
permittedArrowDirections:0
Code -
[self.popoverController presentPopoverFromBarButtonItem:anItem
permittedArrowDirections:0
animated:YES];
Zéro dit "NoDirection".
Swift3 , ce code fonctionne pour moi
popover.permittedArrowDirections = .init(rawValue: 0)
PourSwift 2.0
ET iOS9
, la solution est la suivante:
popoverViewController?.permittedArrowDirections = UIPopoverArrowDirection()
Essayez ceci, ça marche pour moi.
[self.popoverViewController presentPopoverFromRect:rect inView:self.view permittedArrowDirections:0 animated:YES];
Cela fonctionne bien pour moi.
[popoverController presentPopoverFromRect:CGRectMake(0, 0, 20, 20)
inView:self.view
permittedArrowDirections:NULL
animated:YES];
Profitez de codage.
Swift4 :
popover.permittedArrowDirections = []
Non, il n'y a pas d'option UIPopoverArrowDirectionNone
, et UIPopoverArrowDirectionUnknown
lève une exception, je pense, si vous essayez de l'utiliser pour la présenter.
Au lieu d'un contrôleur popover, vous pouvez appeler presentModalViewController:animated:
et configurer le contrôleur que vous présentez sur un style de présentation modal de UIModalPresentationFormSheet
ou peut-être UIModalPresentationPageSheet
. Ce sont des écrans popup plus traditionnels que popovers.
Dans Swift, vous pouvez simplement faire:
popoverPresentationController.permittedArrowDirections = []
Dans une autre configuration, vous auriez pu utiliser:
popoverPresentationController.permittedArrowDirections = [.up, .down]
Dans mon cas pour les développeurs Swift
popoverController.sourceView = self.view
popoverController.sourceRect = self.view.bounds
popoverController.backgroundColor = UIColor.brownColor()
popoverController.permittedArrowDirections = UIPopoverArrowDirection.init(rawValue: 0)
popoverController.sourceRect = CGRectMake(width/4, hieght/4, width/2, hieght/2);
N'utilisez pas Popovers si vous ne voulez pas montrer de flèches. Présentez votre contrôleur de vue en tant que modal et utilisez plutôt un UIModalPresentationFormSheet.
Exemple:
UIStoryboard *sb = [UIStoryboard storyboardWithName:@"MyStoryBoard" bundle:nil];
UIViewController* viewController = [sb instantiateViewControllerWithIdentifier:@"myViewController"];
viewController.modalPresentationStyle = UIModalPresentationFormSheet;
[presenterViewController presentViewController: viewController animated:YES completion:^{
}];
Essaye celui-là
[popOverController presentPopoverFromRect:CGRectMake(0, 0, 30, 40) inView:popOverContentView permittedArrowDirections:0 animated:NO];
J'utilise popover pour afficher le menu en fonction de la coordonnée tactile . Dans ce cas, popover utilise la hauteur maximale de self.view
CGRect popeverFrame = CGRectMake(touchPoint.x, touchPoint.y, 0, 0);
[self.popover presentPopoverFromRect:popeverFrame
inView:self.view
permittedArrowDirections:UIPopoverArrowDirectionAny
animated:YES];
Mais quand j'utilise la direction 0. Popover Rectangle ne définit pas la hauteur maximale et ne peut être défini que par la propriété appropriée.
CGRect popeverFrame = CGRectMake(touchPoint.x, touchPoint.y, 0, 0);
[self.popover presentPopoverFromRect:popeverFrame
inView:self.view
permittedArrowDirections:UIPopoverArrowDirectionAny
animated:YES];
J'espère que cela vous aidera: Aide sur la taille de UIPopOverController
Dans Swift 3, vous pouvez créer une extension UIPopoverArrowDirection
pour ceci:
extension UIPopoverArrowDirection {
public static var noArrow: UIPopoverArrowDirection {
return UIPopoverArrowDirection(rawValue: 0)
}
}
et tu peux le faire:
popoverPresentationController!.permittedArrowDirections = .noArrow
Pour faire un pop sur la direction none et la faire apparaître au centre du contrôleur de vue:
let PopSrnVar = popoverPresentationController
let ConRctVar = view.frame
PopSrnVar!.sourceRect = CGRectMake(ConRctVar.width/4, ConRctVar.height/4, ConRctVar.width/2, ConRctVar.height/2)
// To make arrows as none
PopSrnVar!.permittedArrowDirections = UIPopoverArrowDirection()