UIPopoverController改变UIPopoverArrowDirection的位置

我想将UIPopoverArrowDirection移动到左侧,使得实际箭头不再居中,但是左边是25%,右边是75%。

为了帮助理解我的意思,请看两个屏幕截图,我希望它像第二个…

正常的弹出窗口

Popover正确放置了我想要的箭头

问题是没有真正的方法可以深入挖掘popover类……

通过指定“presentPopoverFromRect”并使该rect受到足够的约束,这对于内置类已经可行了。

这样做的例子

以下是直接从导致上述内容的代码中获取的代码。 额外的绒毛是因为小齿轮的东西在UINavigationBar的UIToolbar中。 r是UIToolbar的框架,它被调整到正确的位置(对于箭头)或者它稍微偏离中心。 MGSettingsView是视图控制器(其中包含“启用转换”,“启用夜间模式”等)。

 UINavigationItem *item = scrollView.navbar.topItem; UIToolbar *authorTools = (UIToolbar *)[item.rightBarButtonItem customView]; CGRect r = authorTools.frame; r.size.width = 18; r.origin.x += 12; CGSize popoverSize = CGSizeMake(300.f, 500.f); MGSettingsView *settingsView = [[MGSettingsView alloc] initWithSize:popoverSize]; UIPopoverController *poctl = [[UIPopoverController alloc] initWithContentViewController:settingsView]; settingsView.popover = poctl; poctl.delegate = self; poctl.popoverContentSize = popoverSize; [poctl presentPopoverFromRect:r inView:self.view permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES]; [settingsView release]; 

如果这不是你所要求的,那么我认为你最好重新解释一下你的问题。 🙂

UIPopoverController类提供了一种从坐标(Rect)显示内容的简单方法。 您可以设置要自动调整的popoverArrowDirection,就是这样。 从这些信息中,系统会自动显示弹出框以适应屏幕并尊重你想要的直接,你不能要求更多。

检查下面的方法,你可以给出arrowDirections方向的rect。

 - (void)presentPopoverFromRect:(CGRect)rect inView:(UIView *)view permittedArrowDirections:(UIPopoverArrowDirection)arrowDirections animated:(BOOL)animated