2011-11-07 71 views
4

我实现了一个UIPopoverController,它充满了分组的UITableView。只要弹出窗口不可见,表格视图中的单元格数量就可以动态变化。一旦弹出窗口变得可见,单元格的数量就是固定的。错误的大小从UITableView.SizeThatFits()

当弹出窗口变得可见时,我将弹窗内容的大小调整为表格视图的高度。我使用UITableView中的SizeThatFits()方法获取表大小并使用此值设置PopoverContentSize高度。

这个工作正常,当应用程序正在运行。但总是第一次在应用程序重新启动后显示弹出窗口,SizeThatFits()提供了错误的高度(大约60像素到高)。有没有人知道这个问题可能是什么?

+0

你解决了这个问题吗?我现在看到了同样的问题(viewDidLoad比viewWillAppear中的高40个像素,但在viewWillAppear中弹出大小已经太晚了)。我怀疑这是由于这样一个事实,即在最初的调用过程中,UITableView不在已经加载的导航控制器内,并且可能sizeThatFits试图在这种情况下做一些巧妙的事情,例如考虑导航条的高度 – Clafou

回答

2

我有一个类似的问题,因为我在ViewDidLoad中执行我的计算。我能够通过在视图代码中创建一个布尔标志并且只在ViewDidAppear中执行计算(如果没有设置标志(当然,设置标志以便逻辑不会每次重复))来解决此问题。

+1

I second那。你不会在LoadView()或ViewDidLoad()中获得可靠的尺寸。第一个回调的地方是ViewWillAppear()。只要把你的代码放在那里就行了。 – Krumelur

+0

我已经测试过这个解决方案。实际上,ViewWillAppear中的尺寸总是正确计算的。但Popover从来没有正确地使用过这些值,无论我是直接设置PopoverContentSize还是使用了SetPopoverContentSize方法。 Popover由工具栏中的PresentFromBarButtonItem调用。然后,ViewWillAppear由iOS调用,其中大小已设置。它看起来像Popover在PresentFromBarButtonItem被调用后不接受大小更改。任何想法? –

1

在iOS 5及更高版本中,在viewDidLayoutSubviews UIViewController方法中调用时,UITableView上的sizeThatFits会给出正确的结果。