Ios 如何使UIPopoverController自动更改其箭头方向
我在UIPopOverController中遇到了一个奇怪的问题。 通常,我以这种方式呈现popover:Ios 如何使UIPopoverController自动更改其箭头方向,ios,cocoa-touch,uipopovercontroller,Ios,Cocoa Touch,Uipopovercontroller,我在UIPopOverController中遇到了一个奇怪的问题。 通常,我以这种方式呈现popover: [popoverVC presentPopoverFromRect:sender.frame inView:sender.superview permittedArrowDirections:UIPopoverArrowDirectionLeft animated:NO]; 但是,有时按钮(发送器)右侧没
[popoverVC presentPopoverFromRect:sender.frame
inView:sender.superview
permittedArrowDirections:UIPopoverArrowDirectionLeft
animated:NO];
但是,有时按钮(发送器)右侧没有足够的空间,popover会显示在按钮下方,并带有UIPopoOverArrowDirectionUp。这是有意义的-如果popover不能正确显示,控制器会尝试用不同的箭头来显示它
但是当我把我的按钮(发送器)向左移动大约10个像素时,popover就不是这样了。仍然没有足够的空间来正确显示它,但它并没有改变它的箭头,尽管popover的宽度约为20px,所以它太小了
有没有办法说popovercontroller:“如果popover没有足够的空间来显示所有内容,请更改箭头方向”为什么不使用苹果公司推荐的
uiPopOverErrorDirectionAny
,或者,如果您绝对必须使用uiPopOverErrorDirectionLeft | uiPopOverErrorDirectionUp
?popover箭头的准确方向很少有那么重要
如果这不起作用,我想唯一的选择就是用动作法做一些数学题。(免责声明:我从未尝试过,但我不明白如果必须这样做,为什么您不能这么做。)首先将发送者的边界转换为顶级视图的坐标空间。根据应用程序视图层次结构的具体情况,您可能需要将边界/帧转换为适当的视图或从中转换。除非你有什么奇怪的事情发生,否则这应该是可行的:
[self.view convertRect:[sender bounds] fromView:sender]
然后检查生成的矩形距离屏幕右边缘是否超过X点,其中X是弹出框的宽度(包括黑色边框和箭头)。如果有足够的空间,请按照上面所说的出示府绸。如果没有,请改用UIPopOverErrorDirectionUp。为什么不使用苹果公司推荐的
UIPopOverErrorDirectionAny
,或者,如果您绝对必须使用UIPopOverErrorDirectionLeft | UIPopOverErrorDirectionUp
?popover箭头的准确方向很少有那么重要
如果这不起作用,我想唯一的选择就是用动作法做一些数学题。(免责声明:我从未尝试过,但我不明白如果必须这样做,为什么您不能这么做。)首先将发送者的边界转换为顶级视图的坐标空间。根据应用程序视图层次结构的具体情况,您可能需要将边界/帧转换为适当的视图或从中转换。除非你有什么奇怪的事情发生,否则这应该是可行的:
[self.view convertRect:[sender bounds] fromView:sender]
然后检查生成的矩形距离屏幕右边缘是否超过X点,其中X是弹出框的宽度(包括黑色边框和箭头)。如果有足够的空间,请按照上面所说的出示府绸。如果没有,请改用UIPopoverArrowDirectionUp。我尝试过UIPopoverArrowDirectionLeft | UIPopoverArrowDirectionUp,但它只在顶部显示箭头,即使仍然可以在左侧显示。(我猜UIPopOverController不知道什么时候可能,什么时候不可能)。我已经尝试按照您的建议手动计算到屏幕边缘的距离。也许这不是最好的解决方案,但它确实有效。但是:我遇到了另一个问题。我想在用户旋转设备时更改popoverArrowDirection。有没有一种方法可以做到这一点而不必放弃并再次展示它?不幸的是,你需要按照你所说的去做——放弃popover并在
didRotateFromInterfaceOrientation:
中再次展示它。我试过UIPopopOverErrorDirectionLeft | UIPopOverErrorDirectionUp,但是,即使仍然可以在左侧显示,也只能在顶部显示箭头。(我猜UIPopOverController不知道什么时候可能,什么时候不可能)。我已经尝试按照您的建议手动计算到屏幕边缘的距离。也许这不是最好的解决方案,但它确实有效。但是:我遇到了另一个问题。我想在用户旋转设备时更改popoverArrowDirection。有没有一种方法可以做到这一点而不必放弃并再次展示它?不幸的是,您需要按照您所说的去做——放弃popover并在didRotateFromInterfaceOrientation:
中再次展示它。