Pergunta

É possível apresentar um popover sem nenhum tipo de flechas apontando em algum lugar?

Foi útil?

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
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top