2011-11-07 68 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會給出正確的結果。