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 } |
将
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 = [] |
对于
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]; |
享受编码。
不,没有
您可以调用
如果您不想显示箭头,请不要使用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中,您可以为此构建一个
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 |