没有任何箭头的UIPopover

时间:2010-08-03 21:24:21

标签: uikit ipad uipopovercontroller

是否有可能在没有任何箭头指向某处的情况下呈现弹出窗口?

17 个答案:

答案 0 :(得分:99)

是的,可以这样做:

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

零表示没有方向。

答案 1 :(得分:22)

对于iPhone和swift 2.0试试这个

启动弹出窗口的代码

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)
}

并将其添加到ViewController

func adaptivePresentationStyleForPresentationController(controller: UIPresentationController) -> UIModalPresentationStyle {
    return UIModalPresentationStyle.None
}

答案 2 :(得分:8)

permittedArrowDirections设置为0。

permittedArrowDirections:0

代码 -

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

零告诉“NoDirection”。

答案 3 :(得分:7)

Swift3 ,此代码适用于我

popover.permittedArrowDirections = .init(rawValue: 0)

答案 4 :(得分:4)

Swift4

popover.permittedArrowDirections = []              

答案 5 :(得分:4)

对于 Swift 2.0iOS9 ,解决方案是:

popoverViewController?.permittedArrowDirections = UIPopoverArrowDirection()

答案 6 :(得分:4)

试试这个,它对我有用。

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

答案 7 :(得分:3)

这对我来说很好。

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

享受编码。

答案 8 :(得分:2)

在我的案例中为快速开发人员

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

答案 9 :(得分:2)

在Swift中,你可以做到:

popoverPresentationController.permittedArrowDirections = []

由于您可以使用其他配置:

popoverPresentationController.permittedArrowDirections = [.up, .down]

答案 10 :(得分:2)

不,没有UIPopoverArrowDirectionNone选项,而UIPopoverArrowDirectionUnknown会抛出异常,我想如果您尝试使用它来呈现。

您可以调用presentModalViewController:animated:而不是弹出控制器,并将您呈现的控制器设置为模式演示样式UIModalPresentationFormSheetUIModalPresentationPageSheet。那些比popovers更传统的弹出屏幕。

答案 11 :(得分:1)

我根据触摸坐标使用popover显示菜单。 在这种情况下,popover使用self.view的最大高度

CGRect popeverFrame = CGRectMake(touchPoint.x, touchPoint.y, 0, 0);
[self.popover presentPopoverFromRect:popeverFrame
                              inView:self.view
            permittedArrowDirections:UIPopoverArrowDirectionAny
                            animated:YES];

但是当我使用0方向时。 Popover矩形不会将高度设置为最大值,只能通过适当的属性设置。

CGRect popeverFrame = CGRectMake(touchPoint.x, touchPoint.y, 0, 0);
[self.popover presentPopoverFromRect:popeverFrame
                              inView:self.view
            permittedArrowDirections:UIPopoverArrowDirectionAny
                            animated:YES];

希望这会有所帮助:Help with UIPopOverController size

答案 12 :(得分:1)

如果您不想显示箭头,请不要使用Popovers。将视图控制器显示为模态并改为使用UIModalPresentationFormSheet。

示例:

UIStoryboard *sb = [UIStoryboard storyboardWithName:@"MyStoryBoard" bundle:nil];
UIViewController* viewController = [sb instantiateViewControllerWithIdentifier:@"myViewController"];
viewController.modalPresentationStyle = UIModalPresentationFormSheet;
[presenterViewController presentViewController: viewController animated:YES completion:^{

}];

答案 13 :(得分:1)

试试这个

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

答案 14 :(得分:1)

在swift 3中,您可以为此构建UIPopoverArrowDirection扩展名:

extension UIPopoverArrowDirection {
    public static var noArrow: UIPopoverArrowDirection {
        return UIPopoverArrowDirection(rawValue: 0)
    }
}

你可以这样做:

popoverPresentationController!.permittedArrowDirections = .noArrow

答案 15 :(得分:0)

要使方向无弹出并使其显示在视图控制器的中心:

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()

答案 16 :(得分:-2)

SWIFT中的一个简单解决方案:

popover!.permittedArrowDirections = nil