2010-09-08 61 views
5

我有一個UIPopoverController包含UITableView。彈出窗口在其視圖控制器的-viewDidAppear函數中調整大小以適應表格的內容。雖然popover正確調整大小,但其箭頭通常不再指向原始的CGRect。有沒有辦法強制彈出窗口在調整大小後重新定位,以便其箭頭指向其預定目標?調整後調整UIPopoverController位置

編輯:我不能設置酥料餅的大小-viewDidLoad,因爲表視圖不會加載它的數據,直到-viewDidAppear被調用,因此我不知道酥料餅應該是什麼樣大小,直到再。另外,當單擊其中一個表視圖單元格以顯示另一個視圖時,我調整了彈出窗口的大小,這也導致箭頭不再指向其預期目標。

+0

您可以在加載表之前設置彈出窗口的大小。這兩件事是完全分開的。你正在做的是設置封裝框架的大小;如果'UITableView'的實際內容大小更長,您將獲得滾動條,就像在iPhone上加載表格視圖並且內容高於480像素時發生的情況一樣。 – 2010-09-08 19:55:35

+0

@Shaggy Frog:我想盡量避免滾動條。 – titaniumdecoy 2010-09-08 22:32:34

+0

再一次,你誤解了。通常,如果'UITableView'中的內容比它的框架高,它將顯示滾動條。這是一個完全獨立的話題,與你所問的問題完全不同,它正在調整popover視圖的框架,我已經解釋瞭如何操作。 – 2010-09-08 23:55:31

回答

6

我認爲這可能是錯誤的方法去做,因爲你不得不重新開始定位箭頭的內置行爲。

我不調整viewDidAppear中的彈出窗口內容。我設置視圖控制器的viewDidLoad方法,例如contentSizeForViewInPopover屬性:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    self.contentSizeForViewInPopover = CGSizeMake(320, 155); // sized for a 3-row UITableView 
} 

(快速警告:如果你正在開發一個通用的應用程序,該代碼將導致運行3.1.X設備運行時的碰撞和)

您還可以在彈出控制器出現之前設置彈出控制器的內容大小,這應該可以解決您的問題。檢查出popoverContentSize屬性。

+0

謝謝,但這不適用於我的情況;看到我更新的問題。 – titaniumdecoy 2010-09-08 19:49:18

+1

@titaniumdecoy它會工作,看到我的迴應 – 2010-09-08 19:56:14

+0

@ shaggy青蛙popovercontentsize是個好主意'self.popoverController.popoverContentSize = CGSizeMake(320,300);'會做da工作。謝謝 – 2011-05-26 07:59:06

3

根據this answer,您可以再次彈出presentPopoverFromRect:inView:,它將重新定位箭頭。我沒有自己測試過。

+2

這在Technical Q&A QA1694中有記錄:http://developer.apple.com/iphone/library/qa/qa2010/qa1694.html – 2011-01-16 21:07:00