59

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

4

17 回答 17

108

是的,可以这样做:

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

零表示没有方向。

于 2010-09-02T00:54:09.783 回答
25

对于 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
}
于 2015-10-09T09:40:06.817 回答
16

斯威夫特4

popover.permittedArrowDirections = []              
于 2018-09-05T12:33:09.953 回答
11

设置permittedArrowDirections为 0。

permittedArrowDirections:0

代码 -

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

零告诉“NoDirection”。

于 2011-09-12T09:45:58.660 回答
9

Swift3,这段代码对我有用

popover.permittedArrowDirections = .init(rawValue: 0)
于 2017-01-19T10:31:39.793 回答
5

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

popoverPresentationController.permittedArrowDirections = []

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

popoverPresentationController.permittedArrowDirections = [.up, .down]
于 2018-04-01T15:29:03.610 回答
5

对于Swift 2.0iOS9解决方案是:

popoverViewController?.permittedArrowDirections = UIPopoverArrowDirection()
于 2016-01-28T11:36:02.637 回答
4

试试这个,它对我有用。

[self.popoverViewController presentPopoverFromRect:rect inView:self.view  permittedArrowDirections:0 animated:YES];
于 2011-07-07T07:08:41.223 回答
4

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

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

你可以这样做:

popoverPresentationController!.permittedArrowDirections = .noArrow
于 2017-03-18T10:42:26.590 回答
3

这对我来说很好。

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

享受编码。

于 2013-07-10T09:52:45.030 回答
3

在我的情况下,对于 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);
于 2016-04-14T11:18:22.690 回答
2

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

presentModalViewController:animated:您可以调用并设置您正在呈现的控制器具有模态呈现样式,而不是弹出框控制器,UIModalPresentationFormSheet或者可能是UIModalPresentationPageSheet. 这些是比弹出窗口更传统的弹出屏幕。

于 2010-08-04T18:38:33.773 回答
2

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

例子:

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

}];
于 2014-07-14T16:10:40.773 回答
1

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

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

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

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

希望这会有所帮助:帮助 UIPopOverController 大小

于 2013-08-27T05:58:51.247 回答
1

试试这个

[popOverController presentPopoverFromRect:CGRectMake(0, 0, 30, 40) inView:popOverContentView permittedArrowDirections:0 animated:NO];
于 2012-12-03T11:30:00.627 回答
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()
于 2016-09-30T12:33:09.873 回答
-2

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

popover!.permittedArrowDirections = nil
于 2015-05-27T10:44:43.687 回答