resize后调整UIPopoverController的位置

我有一个UIPopoverController包含一个UITableView 。 popup窗口在其视图控制器的-viewDidAppear函数中resize以适应表格的内容。 当popover正确调整时,它的箭头通常不再指向原始的CGRect 。 是否有办法强制popup窗口在重新resize后重新定位,以便其箭头指向其预定的目标?

编辑:我不能在-viewDidLoad设置popup窗口的大小,因为表视图不加载其数据,直到-viewDidAppear ,结果我不知道什么大小的-viewDidAppear应该是在那之前。 另外,当单击其中一个表视图单元格来显示另一个视图时,我调整了popup窗口的大小,这也导致箭头不再指向其预期的目标。

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

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

 - (void)viewDidLoad { [super viewDidLoad]; self.contentSizeForViewInPopover = CGSizeMake(320, 155); // sized for a 3-row UITableView } 

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

您也可以在popup控制器之前设置内容大小,这应该照顾您的问题。 查看popoverContentSize属性。

根据这个答案 ,你可以再次调用presentPopoverFromRect:inView:在popup窗口,它将重新定位箭头。 我自己没有testing过。