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

Posted

技术标签:

【中文标题】手动设置 UIPopover 箭头方向和位置【英文标题】:Set UIPopover arrow direction and position manually 【发布时间】:2010-12-08 05:09:53 【问题描述】:

我正在使用 UIBarButtonItem。在我的场景中,当我双击该条形按钮时,我想显示每个条形按钮的弹出框。所以我使用来自那个 UIBarButtonItem 的 UITapGesture。但是,弹出箭头总是出现在所有 UIBarButtonItem 的中间。

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

如何设置弹出框箭头的位置和方向?

【问题讨论】:

哇……谢谢……我以前从来没有意识到 :) 【参考方案1】:

使用以下方法设置弹出框的方向:

[yourPopover setPopoverArrowDirection: UIPopoverArrowDirectionDown];

您还可以使用UIPopoverArrowDirectionUpUIPopoverArrowDirectionLeftUIPopoverArrowDirectionRightUIPopoverArrowDirectionAny

对于斯威夫特

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

【讨论】:

我知道那个方向,但我的意思是我想改变方向的位置。我使用 UIPopoverArrowDirectionUp,但我希望箭头位置在 X = 50 和 y = 100,我可以这样做?? 几个月前我真的很着迷...不幸的是,您无法指定箭头的位置,只能指定 uiipopover 显示的矩形。 不,不是哈哈,我有点希望 *** 也知道这个问题的答案......我有一个让它工作的好主意......但只会尝试一次我已经放弃寻找第 3 方 PopoverCONtroller 或找到移动箭头 X 位置的正确方法...如果找到答案,将更新我类似的 *** 问题... @SamRitchie 但是您可以通过将箭头指向的 CGRect 定义为大小为 0 x 0 来指定箭头的位置。 @R.Dewi 接受的答案是正确的,将方向改为向下。【参考方案2】:

我使用方法 permittedArrowDirections = .Down,它对我有用。快速示例:

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)

【讨论】:

你可以使用popController.popoverPresentationController?.sourceView = sender as? UIView ; popController.popoverPresentationController?.sourceRect = sender.bounds 您可以将popoverPresentationController.sourceRect = CGRectMake(0, 0, sender.frame.size.width, sender.frame.size.height) 更改为popoverPresentationController.sourceRect = sender.bounds【参考方案3】:

如果您使用的是 IBAction 方法,则可以使用 (id)sender 作为其参数。 (即调用按钮)然后您可以将弹出框的附件矩形设置为按钮的框架。箭头将尽最大努力沿着该框架的侧面安装在适当的位置。见UIPopoverController Class Reference。

-(IBAction)sortButtonPressed:(id)sender 
  // Set up your popover class, this varies per your implementation
  MyPopoverClass *iPop = [[MyPopoverClass alloc] initWithNibName:@"MyPopover" bundle:nil];
  UIPopoverController *popover = [[UIPopoverController alloc] initWithContentViewController:iPop];

  // Grab the button info from the input parameter
  UIButton *button = (UIButton *)sender;
  CGRect buttonRectangle = button.frame;

  // Set the arrow direction
  UIPopoverDirection dir = UIPopoverArrowDirectionAny; // Or Up, Down, etc.

  // Put it all together
  [popover presentPopoverFromRect:buttonRectangle inView:mySubView permittedArrowDirections:dir animated:YES];

  [popover release]
  [iPop release];

如有必要,您还可以手动对 CGRect 进行硬编码。缩小矩形的宽度/高度可以让您更严格地控​​制箭头的位置。

【讨论】:

【参考方案4】:

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

【讨论】:

以上是关于手动设置 UIPopover 箭头方向和位置的主要内容,如果未能解决你的问题,请参考以下文章

UIPopOver 和方向改变

python怎样把箭头变为红色

PROE5.0 草绘扫描轨迹都是有一个箭头,如何改变这个箭头的方向与位置?求大神指教!

安卓旋转动画

带方向箭头的地理位置 api

在 JavaScript 中从 gps 位置指向另一个不指向正确方向的箭头