【发布时间】:2010-09-08 18:52:04
【问题描述】:
我有一个UIPopoverController,其中包含一个UITableView。弹出框在其视图控制器的-viewDidAppear 函数中调整大小以适应表格的内容。当弹出框正确调整大小时,它的箭头通常不再指向原始的CGRect。有没有办法强制弹出框在调整大小后重新定位,使其箭头指向其预期目标?
编辑:我无法在-viewDidLoad 中设置弹出框的大小,因为在调用-viewDidAppear 之前表格视图不会加载其数据,因此我不知道在那之前弹出框的大小应该是多少。此外,当单击一个表格视图单元格以显示另一个视图时,我会调整弹出框的大小,这也会导致箭头不再指向其预期目标。
【问题讨论】:
-
可以在表格加载前设置弹出框的大小。这两件事是完全分开的。您正在做的是设置封装框架的大小;如果
UITableView的实际内容大小更长,您将获得滚动条,就像您在 iPhone 上加载表格视图并且内容高于 480 像素时发生的情况一样。 -
@Shaggy Frog:我想尽可能避免滚动条。
-
再一次,你误会了。一般来说,如果
UITableView中的内容高于其框架,它将显示滚动条。那是一个与您所要求的完全不同的主题,即调整弹出视图的框架,我已经解释了如何做。 -
我的问题实际上是两个主题的组合:我在问如何调整弹出框的框架,使其包含的 UITableView 不会显示滚动条(如果可能),不允许弹出框的箭头重新定位。
-
没有真正简单的方法可以做到这一点。 popover 控制器的实现需要知道封装框架有多大,因此它知道它将在屏幕上定位的位置,因此它知道将箭头定位在哪里。我能想到的唯一方法是创建一个表视图控制器的实例并让它在屏幕外显示它的视图,然后查询
UITableView的内容大小,然后处理这个隐藏的视图控制器。这很狡猾。也许 iOS 4.2 会对 popover 控制器有更多的控制,但现在,你离太阳太近了。
标签: cocoa-touch ipad ios uipopovercontroller