调整大小后调整UIPopoverController位置

时间:2010-09-08 18:52:04

标签: cocoa-touch ipad ios uipopovercontroller

我的UIPopoverController包含UITableView。弹出窗口在其视图控制器的-viewDidAppear函数中调整大小以适合表的内容。当弹出窗口正确调整大小时,其箭头通常不再指向原始CGRect。有没有办法强制弹出窗口在调整大小后重新定位自身,使其箭头指向其预期目标?

编辑:我无法在-viewDidLoad中设置弹出窗口的大小,因为在调用-viewDidAppear之前,表视图不会加载其数据,因此直到那时我才知道popover的大小。此外,当单击其中一个表格视图单元格以显示另一个视图时,我会调整popover的大小,这也会导致箭头不再指向其预期目标。

2 个答案:

答案 0 :(得分:6)

我认为这可能是错误的做法,因为你不得不重新开始内置箭头的内置行为。

我没有在viewDidAppear中调整popover内容的大小。我在视图控制器的contentSizeForViewInPopover方法中设置了viewDidLoad属性,例如:

- (void)viewDidLoad
{
    [super viewDidLoad];

    self.contentSizeForViewInPopover = CGSizeMake(320, 155); // sized for a 3-row UITableView
}

(快速警告:如果您正在开发通用应用程序,此代码将导致运行3.1.x及更低版本的设备出现运行时崩溃。)

您还可以在弹出控制器出现之前设置弹出控制器的内容大小,这应该可以解决您的问题。查看popoverContentSize属性。

答案 1 :(得分:3)

根据this answer,您可以再次在弹出窗口上调用presentPopoverFromRect:inView:,它会重新定位箭头。我自己没有测试过。