0

我在 UIPopOverController 中遇到了奇怪的问题。通常,我以这种方式呈现弹出框:

[popoverVC presentPopoverFromRect:sender.frame
              inView:sender.superview
              permittedArrowDirections:UIPopoverArrowDirectionLeft
              animated:NO];

但是,有时按钮(发送者)右侧没有足够的空间,并且弹出框显示在带有 UIPopoverArrowDirectionUP 的按钮下方。这是有道理的——如果弹出框不能正确显示,控制器会尝试用不同的箭头显示它。

但是当我将按钮(发送器)向左移动大约 10 个像素时,popover 不会以这种方式运行。仍然没有足够的空间来正确显示它,但它并没有改变它的箭头,尽管 popover 的宽度约为 20px,所以它太小了。

有没有办法说popovercontroller:“如果popover没有足够的空间来显示所有内容,改变箭头方向”?

4

1 回答 1

4

为什么不使用UIPopoverArrowDirectionAnyApple 推荐的,或者,如果你绝对必须使用,UIPopoverArrowDirectionLeft | UIPopoverArrowDirectionUp?弹出框箭头的确切方向很少那么重要。

如果这不起作用,我想唯一的选择是在操作方法中做一些数学运算。(免责声明:我从来没有尝试过这个,但我不明白为什么你不能这样做,如果你绝对必须这样做。)首先将发送者的边界转换为顶级视图的坐标空间。根据应用程序视图层次结构的具体情况,您可能需要将边界/框架转换为适当的视图/从适当的视图转换。除非你有一些奇怪的事情发生,否则这应该有效:

[self.view convertRect:[sender bounds] fromView:sender]

然后检查生成的矩形是否距离屏幕右边缘超过X个点,其中X是弹出框的宽度(包括黑色边框和箭头)。如果有足够的空间,请按照上面的说明呈现弹出框。如果没有,请改用 UIPopoverArrowDirectionUp。

于 2012-07-17T14:27:19.877 回答