关于uikit:UIPopover没有任何箭头

UIPopover without any arrows

是否可以在没有任何箭头指向某处的情况下显示弹出框?


是的,可以这样做:

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

零代表无方向。


对于iPhone和Swift 2.0,请尝试使用此工具

启动弹出窗口的代码

1
2
3
4
5
6
7
8
9
10
11
12
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

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

permittedArrowDirections设置为0。

1
permittedArrowDirections:0

代码-

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

零表示" NoDirection"。


Swift3,此代码对我有用

1
popover.permittedArrowDirections = .init(rawValue: 0)

Swift4:

1
popover.permittedArrowDirections = []

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

1
popoverViewController?.permittedArrowDirections = UIPopoverArrowDirection()


在Swift中,您可以简单地执行以下操作:

1
popoverPresentationController.permittedArrowDirections = []

由于在另一种配置中,您可以使用:

1
popoverPresentationController.permittedArrowDirections = [.up, .down]

试试这个,对我有用。

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

就快速开发人员而言

1
2
3
4
5
6
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);

这对我来说很好。

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

享受编码。


不,没有UIPopoverArrowDirectionNone选项,并且UIPopoverArrowDirectionUnknown引发异常,我认为如果您尝试使用它来呈现。

您可以调用presentModalViewController:animated:而不是弹出控件,并将要显示的控制器设置为具有模式表示形式的UIModalPresentationFormSheetUIModalPresentationPageSheet。与弹出框相比,这些弹出框更传统。


如果您不想显示箭头,请不要使用Popover。将您的视图控制器显示为Modal,而改用UIModalPresentationFormSheet。

例:

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

}];

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

1
2
3
4
5
extension UIPopoverArrowDirection {
    public static var noArrow: UIPopoverArrowDirection {
        return UIPopoverArrowDirection(rawValue: 0)
    }
}

并且您可以执行以下操作:

1
popoverPresentationController!.permittedArrowDirections = .noArrow

我使用弹出框显示菜单,具体取决于触摸坐标。
在这种情况下,弹出框会使用self.view的最大高度

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

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

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

希望对您有所帮助:UIPopOverController大小帮助


试试这个

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

要使弹出方向都不出现,并使其出现在视图控制器的中央:

1
2
3
4
5
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()

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

1
popover!.permittedArrowDirections = nil