Uipopover sem flechas
-
25-09-2019 - |
Pergunta
É possível apresentar um popover sem nenhum tipo de flechas apontando em algum lugar?
Solução
Sim, é possível apenas fazer:
[self.popoverController presentPopoverFromBarButtonItem:anItem
permittedArrowDirections:0
animated:YES];
O zero não representa nenhuma direção.
Outras dicas
Para iPhone e Swift 2.0, tente este
Código para iniciar o 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)
}
E adicione isso ao seu ViewController
func adaptivePresentationStyleForPresentationController(controller: UIPresentationController) -> UIModalPresentationStyle {
return UIModalPresentationStyle.None
}
Colocou o permittedArrowDirections
a 0.
permittedArrowDirections:0
Código -
[self.popoverController presentPopoverFromBarButtonItem:anItem
permittedArrowDirections:0
animated:YES];
Zero diz "Nodirection".
Swift3, este código funciona para mim
popover.permittedArrowDirections = .init(rawValue: 0)
Por Swift 2.0
e iOS9
a solução é:
popoverViewController?.permittedArrowDirections = UIPopoverArrowDirection()
Tente isso, funciona para mim.
[self.popoverViewController presentPopoverFromRect:rect inView:self.view permittedArrowDirections:0 animated:YES];
Swift4:
popover.permittedArrowDirections = []
Este trabalho é bom para mim.
[popoverController presentPopoverFromRect:CGRectMake(0, 0, 20, 20)
inView:self.view
permittedArrowDirections:NULL
animated:YES];
Aproveite a codificação.
Não, não há UIPopoverArrowDirectionNone
opção e UIPopoverArrowDirectionUnknown
Joga uma exceção, acho que se você tentar usar isso para apresentar.
Em vez de um controlador de popover, você pode ligar presentModalViewController:animated:
e defina o controlador que você está apresentando para ter um estilo de apresentação modal de UIModalPresentationFormSheet
ou talvez UIModalPresentationPageSheet
. Essas são telas pop -up mais tradicionais do que as popovers.
No meu caso para desenvolvedores 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);
No Swift 3, você pode construir um UIPopoverArrowDirection
extensão para isso:
extension UIPopoverArrowDirection {
public static var noArrow: UIPopoverArrowDirection {
return UIPopoverArrowDirection(rawValue: 0)
}
}
E o que você pode fazer:
popoverPresentationController!.permittedArrowDirections = .noArrow
Em Swift, você pode simplesmente fazer:
popoverPresentationController.permittedArrowDirections = []
Desde outra configuração que você poderia ter usado:
popoverPresentationController.permittedArrowDirections = [.up, .down]
Tente este
[popOverController presentPopoverFromRect:CGRectMake(0, 0, 30, 40) inView:popOverContentView permittedArrowDirections:0 animated:NO];
Não use popovers se não quiser mostrar flechas. Apresente seu controlador de visualização como um modal e use uma folha de forma de formação uimodal.
Exemplo:
UIStoryboard *sb = [UIStoryboard storyboardWithName:@"MyStoryBoard" bundle:nil];
UIViewController* viewController = [sb instantiateViewControllerWithIdentifier:@"myViewController"];
viewController.modalPresentationStyle = UIModalPresentationFormSheet;
[presenterViewController presentViewController: viewController animated:YES completion:^{
}];
Eu uso o Popover para mostrar o menu, dependendo da coordenada do toque. Nesse caso
CGRect popeverFrame = CGRectMake(touchPoint.x, touchPoint.y, 0, 0);
[self.popover presentPopoverFromRect:popeverFrame
inView:self.view
permittedArrowDirections:UIPopoverArrowDirectionAny
animated:YES];
Mas quando eu uso o 0-direcionamento. O retângulo Popover não define a altura no máximo e só pode ser definido pela propriedade apropriada.
CGRect popeverFrame = CGRectMake(touchPoint.x, touchPoint.y, 0, 0);
[self.popover presentPopoverFromRect:popeverFrame
inView:self.view
permittedArrowDirections:UIPopoverArrowDirectionAny
animated:YES];
Espero que isso ajude: Ajuda com o tamanho do UipopoverController
Para tornar a direção de uma direção nenhuma e fazer com que apareça no centro do controlador de exibição:
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()
Uma solução simples em Swift:
popover!.permittedArrowDirections = nil