Cocoa touch 调整大小后调整UIPOP超控器位置

Cocoa touch 调整大小后调整UIPOP超控器位置,cocoa-touch,ipad,ios,uipopovercontroller,Cocoa Touch,Ipad,Ios,Uipopovercontroller,我有一个uipopcovercontroller包含UITableView。popover在其视图控制器的-viewdiDisplay功能中调整大小,以适应表格的内容。虽然popover可以正确调整大小,但其箭头通常不再指向原始的CGRect。有没有办法强制popover在调整大小后重新定位,使其箭头指向预期目标 编辑:我无法在-viewDidLoad中设置popover的大小,因为在调用-viewDidAppear之前,表格视图不会加载其数据,因此我不知道popover的大小。此外,当单击其中

我有一个
uipopcovercontroller
包含
UITableView
。popover在其视图控制器的
-viewdiDisplay
功能中调整大小,以适应表格的内容。虽然popover可以正确调整大小,但其箭头通常不再指向原始的
CGRect
。有没有办法强制popover在调整大小后重新定位,使其箭头指向预期目标


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

我认为这可能是错误的做法,因为您必须重新执行将箭头定位在起始位置的内置行为

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

- (void)viewDidLoad
{
    [super viewDidLoad];

    self.contentSizeForViewInPopover = CGSizeMake(320, 155); // sized for a 3-row UITableView
}
(快速警告:如果您正在开发通用应用程序,此代码将在运行3.1.x及以下版本的设备上导致运行时崩溃。)


您还可以在演示popover控制器之前设置它的内容大小,这将解决您的问题。检查属性。

根据,您可以再次在popover上调用
presentPopoverFromRect:inView:
,它将重新定位箭头。我自己还没有测试过。

谢谢,但这在我的情况下不起作用;查看我的更新问题。@shaggy frog popovercontentsize是个好主意
self.popoverController.popovercontentsize=cSizeMake(320300)将执行da任务。感谢manNote
contentSizeForViewInPopover
从7.0开始就不推荐使用。您可以在加载表之前设置popover的大小。这两件事是完全不同的。您所做的是设置封装框架的大小;如果
UITableView
的实际内容长度较长,您将获得滚动条,就像在iPhone上加载表格视图时,内容超过480像素时所发生的情况一样。@Shaggy Frog:我希望尽可能避免滚动条。再次,您误解了。通常,如果
UITableView
中的内容高于其框架,它将显示滚动条。这是一个与您所问的完全不同的主题,即调整popover视图的框架,我已经解释了如何做。我的问题实际上是两个主题的组合:我问的是如何调整popover的框架,使其包含的UITableView不会显示滚动条(如果可能),不允许popover的箭头自行重新定位。没有真正简单的方法可以做到这一点。popover控制器的实现需要知道封装框架的大小,这样它就知道它在屏幕上的位置,这样它就知道箭头的位置。我能想象的唯一方法是创建一个表视图控制器实例,让它在屏幕外显示视图,然后查询
UITableView
的内容大小,然后处理这个隐藏的视图控制器。这是不可靠的。也许iOS 4.2会对popover控制器有更多的控制,但现在,你飞得离太阳太近了。这在技术问答QA1694中有记录: