web-dev-qa-db-fra.com

UIPopover sans flèches

Est-il possible de présenter un popover sans aucune sorte de flèches pointant quelque part?

49
David Liu

Oui, il est possible de faire:

 [self.popoverController presentPopoverFromBarButtonItem:anItem   
                                permittedArrowDirections:0
                                                animated:YES];

Le zéro ne représente aucune direction.

99
Matt

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
}
22
Sachin Agarwal

Définissez la permittedArrowDirections à 0.

permittedArrowDirections:0

Code - 

[self.popoverController presentPopoverFromBarButtonItem:anItem   
                                permittedArrowDirections:0
                                                animated:YES];

Zéro dit "NoDirection".

8
Akshay

Swift3 , ce code fonctionne pour moi

popover.permittedArrowDirections = .init(rawValue: 0)
7
Khuong

PourSwift 2.0 ET iOS9, la solution est la suivante:

popoverViewController?.permittedArrowDirections = UIPopoverArrowDirection()
4
Nuno Vieira

Essayez ceci, ça marche pour moi.

[self.popoverViewController presentPopoverFromRect:rect inView:self.view  permittedArrowDirections:0 animated:YES];
4
suresh

Cela fonctionne bien pour moi.

[popoverController presentPopoverFromRect:CGRectMake(0, 0, 20, 20)
                                    inView:self.view 
                  permittedArrowDirections:NULL 
                                  animated:YES];

Profitez de codage.

3
Shivaay

Swift4 :

popover.permittedArrowDirections = []              
3
Alexey Malyarenko

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.

2
Kevlar

Dans Swift, vous pouvez simplement faire:

popoverPresentationController.permittedArrowDirections = []

Dans une autre configuration, vous auriez pu utiliser:

popoverPresentationController.permittedArrowDirections = [.up, .down]
2
Tomn

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);
2
dev_shanghai

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:^{

}];
1
fedtuck

Essaye celui-là

[popOverController presentPopoverFromRect:CGRectMake(0, 0, 30, 40) inView:popOverContentView permittedArrowDirections:0 animated:NO];
1
SumiSadiq

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

1
GxocT

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
1
manueGE

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()
0
Sujay U N