UIPopoverController改变UIPopoverArrowDirection的位置

时间:2011-03-23 06:48:20

标签: ios iphone uipopovercontroller

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

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

Normal Popover

The Popover with correctly placed arrow that I want

问题在于没有真正的方法可以深入了解popover类......

3 个答案:

答案 0 :(得分:7)

通过指定“presentPopoverFromRect”并使该矩形足够受限,内置类已经可以使用了。

example doing this

以下是直接从导致上述内容的代码中获取的代码。额外的绒毛是因为小齿轮的东西在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];

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

答案 1 :(得分:1)

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

答案 2 :(得分:0)

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

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