UIPopoverController:为什么我的popover没有出现在我想要的地方?

时间:2011-03-27 08:05:03

标签: iphone ios ipad uiview uipopovercontroller

简单: 一个视图,我使用presentPopoverFromRect在CGRect中呈现UIPopoverController ... 并且箭头或弹框框架都不会出现在我传入的矩形中我要求的坐标附近。 有线索吗? 我一直试图弄清楚这一点,但我放弃了。这是代码:

if(!myContentController){
    myContentController = [[MyContentController alloc] initWithNibName:myNibName bundle:[NSBundle mainBundle]];
    // This works pretty well. actually when i show the popover
    // i see everything inside as it's supposed to.
}
if(!popover){
   popover = [[UIPopoverController alloc] initWithContentViewController:myContentController];
}
else{
    [popover setContentController:myContentController];
}
popover.delegate = self;
CGPoint touchPointInView = [self touchPoint];//This is working fine too.I've been checking with NSLog.
popover.ContentSize = myPopoverSize;//In this case {320,480}
 [popover presentPopoverFromRect:CGRectMake(touchPoint.x,touchPoint.y,myPopoverSize.width,myPopverSize.height)
                          inView:self.view
        permittedArrowDirections:UIPopoverArrowDirectionAny
                        animated:YES];

接下来会发生什么?弹出窗口没有显示它应该在哪里。如果我通过{0,0}它会在屏幕中间显示,就好像视图大小是(768,512)。我检查了所有视图尺寸,它们都没问题,框架,边界等等。有谁知道我做错了什么?

2 个答案:

答案 0 :(得分:14)

您为presentPopoverFromRect提供的CGRect是一个矩形,它将显示弹出 next (而非 in )。根据rect的位置,popover将出现在指定rect的适当一侧。

如果您希望弹出框出现在特定点,请为其指定一个以原点为点,大小为1,1的矩形。因此,presentPopoverFromRect行中的CGRectMake应为:

CGRectMake(touchPoint.x,touchPoint.y,1,1)

还要确保touchPoint相对于inView(在您的情况下为self.view)。


顺便说一下,代码中还有一些其他错误(可能只是问题中的拼写错误):

  • setContentController应该是setContentViewController
  • popover.ContentSize应为popover.popoverContentSize
  • myPopverSize.height应该是myPopoverSize.height(但这将被1替换)

答案 1 :(得分:1)

在我的情况下,出现此问题的原因如下。您的视图也可以是tableView。因此,当您滚动它并尝试在该tableView中的矩形中显示UIPopover时,它可能不会显示。我用过这个:

[_popoverController presentPopoverFromBarButtonItem:self.navigationItem.rightBarButtonItem permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];