UIPopoverController从矩形框中弹出问题

12

我正在尝试在点击UIButton时呈现UIPopoverController。这是我的代码:

- (IBAction)showColumnChooser:(id)sender {

    ColumnChooserTVC *vc = [[ColumnChooserTVC alloc] init];

    [vc setSelections:allColumns];
    [vc setDelegate:self];
    UIPopoverController *pc = [[UIPopoverController alloc] initWithContentViewController:vc];


    [pc presentPopoverFromRect:[sender frame] inView:self.view 
      permittedArrowDirections:UIPopoverArrowDirectionAny 
                      animated:YES];
    [vc release];
}
当箭头方向为“任意”时,它完全遮挡了按钮,如下所示: enter image description here 如果我将箭头方向设置为“向右”,情况会稍微好一些,但是气泡和按钮之间仍然有一些空隙,看起来不太合适。 enter image description here 我不想使用“技巧”或“hack”的方法,在试错的基础上使用CGRect,我想知道正确的做法是什么?谢谢。
这是界面生成器中的按钮,由Neckto请求提供: enter image description here

抱歉,我不明白您在问什么。您能提供更多细节吗?您想让弹出箭头指向另一个地方吗? - Nekto
我希望箭头直接指向按钮。在这种情况下,您看到“条/线”图标了吗?我希望弹出窗口箭头指向它。在第一个示例中,它完全遮挡了图标/按钮,在第二个示例中,它好了一些,但它并没有指向按钮,而是稍微偏左上方。希望现在清楚了。谢谢。 - 0xSina
那么问题就在于[sender frame]。它可能太大了。你是如何创建那个按钮的? - Nekto
这是来自界面构建器的。我只是将它连接到了IBAction。 - 0xSina
在IB中选择那个按钮,截图并向我们展示。我想看到这个按钮的框架。 - Nekto
我已经更新了我的问题,并附上了按钮的截图。 - 0xSina
2个回答

50

我认为你混淆了坐标系。在你的视图层次结构中的每个级别上,原点都会移动。因此,[sender frame]self.view 中的位置不是按钮所在的位置。

尝试:

[pc presentPopoverFromRect:[sender bounds]
                    inView:sender
  permittedArrowDirections:UIPopoverArrowDirectionAny 
                  animated:YES];

0
当然,还有 Swift!
pc.presentPopoverFromRect(sender.bounds, inView: sender, 
permittedArrowDirections: UIPopoverArrowDirection.Any, animated: true)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接