Ios 手动设置UIPopover箭头方向和位置

Ios 手动设置UIPopover箭头方向和位置,ios,objective-c,uipopovercontroller,uibarbuttonitem,Ios,Objective C,Uipopovercontroller,Uibarbuttonitem,我用的是uibarbuttonim。在我的场景中,当我双击每个条形按钮时,我想显示每个条形按钮的弹出框。所以我用了一个来自于那个维吾尔族的手势。但是,PopOver箭头总是出现在所有UIButButoItIn的中间。 我不能让箭头出现在每个按钮的中间。我的朋友告诉我用点来设置箭头方向,但我不知道怎么做 如何设置popover箭头的位置和方向?使用以下命令设置popover的方向: [yourPopover setPopoverArrowDirection: UIPopoverArrowDirec

我用的是uibarbuttonim。在我的场景中,当我双击每个条形按钮时,我想显示每个条形按钮的弹出框。所以我用了一个来自于那个维吾尔族的手势。但是,PopOver箭头总是出现在所有UIButButoItIn的中间。

我不能让箭头出现在每个按钮的中间。我的朋友告诉我用点来设置箭头方向,但我不知道怎么做


如何设置popover箭头的位置和方向?

使用以下命令设置popover的方向:

[yourPopover setPopoverArrowDirection: UIPopoverArrowDirectionDown];
您还可以使用
uipopooverarrowdirectionup
uipooverarrowdirectionleft
uipooverarrowdirectionright
,以及
uipooverarrowdirectionany

斯威夫特

yourPopover?.permittedArrowDirections = .up // or .down, .left, .right

如果您使用的是iAction方法,则可以使用
(id)sender
作为其参数。(即呼叫按钮)然后您可以将popover的附件矩形设置为按钮的框架。箭头将尽最大努力沿着此框架的侧面在适当的位置附着。看

如有必要,还可以手动硬编码该CGRect。缩小矩形的宽度/高度将允许您更严格地控制箭头的位置。

我使用方法permittedArrowDirections=。向下,这是我的工作。快速示例:

if let popoverPresentationController = shareViewController.popoverPresentationController {
    popoverPresentationController.permittedArrowDirections = .Down
    popoverPresentationController.delegate = self
    popoverPresentationController.sourceView = sender as! UIButton
    popoverPresentationController.sourceRect = CGRectMake(0, 0, sender.frame.size.width, sender.frame.size.height)
}

可以在序列图像板Segue的属性检查器中设置箭头的方向。例如,我仅在以下屏幕截图中将箭头方向设置为向下:

我知道那个方向,但我的意思是我想改变方向的位置。。我使用UIPopoverArrowDirectionUp,但我希望箭头位置在X=50和y=100,我能做到吗?几个月前我真的很痴迷于此。。。不幸的是,你不能指定箭头的位置,只能指定uiipopover显示的矩形。不,它不是哈哈,我希望Stackoverflow也知道这个问题的答案。。。我有一个让它工作的黑客想法…但只有在我放弃寻找第三方PopoverCOntroller或找到移动箭头X位置的正确方法后,才会尝试它。。。如果找到答案,将更新我的类似Stackoverflow问题…@SamRitchie,但您可以通过将箭头指向的CGRect定义为大小为0 x 0来指定箭头的位置。@R.Dewi接受的答案是正确的,将方向更改为down.owhh..谢谢..我以前从未意识到:)您可以使用
popController.popoverPresentationController?.sourceView=发件人身份?UIView;popController.popoverPresentationController?.sourceRect=sender.bounds
您可以通过
popoverPresentationController.sourceRect=CGRectMake(0,0,sender.frame.size.width,sender.frame.size.height)更改

if let popoverPresentationController = shareViewController.popoverPresentationController {
    popoverPresentationController.permittedArrowDirections = .Down
    popoverPresentationController.delegate = self
    popoverPresentationController.sourceView = sender as! UIButton
    popoverPresentationController.sourceRect = CGRectMake(0, 0, sender.frame.size.width, sender.frame.size.height)
}