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

简单:一个视图,我使用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)。 我检查了所有视图尺寸,它们都没问题,框架,边界等等。 有谁知道我做错了什么?

您为presentPopoverFromRect提供的CGRect是它将显示旁边 (不在)的弹出框的矩形。 根据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替换)

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

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