2010-04-29 21 views
4

我有一個基於SplitViewController的應用程序。它在popoverController中使用了一個rootViewController。該RootViewController的指定(在viewDidLoad中)如何在彈出一個viewControllers時更改popoverController的高度?

self.contentSizeForViewInPopover = CGSizeMake(320.0, 573.0); 

當您在RootViewController的選擇一行設置酥料餅的高度,它推動一個secondViewController。所述secondViewController使得酥料餅的高通過指定(在viewDidLoad中):

self.contentSizeForViewInPopover = CGSizeMake(320.0, 900.0); 

當用戶輕敲後退按鈕彈出secondViewController中,酥料餅的高度保持更高。我想調整高度回到原來的大小。我嘗試在viewWillAppear中設置contentSizeForViewInPopover,並在navigationController的willShowViewController委託方法中嘗試設置contentSizeForViewInPopover。但是這些沒有任何效果。

+0

據我所知,這是財產應該如何工作。您可能想要向Apple(bugreport.apple.com)提交一個關於它的錯誤。 – 2010-04-29 16:25:46

+0

我在我的應用程序中做同樣的事情,它似乎工作。也許在你的應用程序的另一部分有一些東西。在viewDidLoad中設置內容大小是正確的。在你的' - [viewWillAppear:]'和' - [viewWillDisappear:]'方法中,你在調用'super'實現嗎? – lucius 2010-04-29 20:08:21

+0

Lucius,我將尺寸設置爲 - [viewsWillAppear]。我也在這個實現中調用[super viewWillAppear:animated]。 (void)viewWillAppear:(BOOL)animated { \t [super viewWillAppear:animated]; self.contentSizeForViewInPopover = CGSizeMake(320.0,573.0); } – Vic 2010-05-01 01:43:35

回答

4

FWIW,我通過手動調整視圖的viewWillAppear方法中的popoverController來解決此問題。換句話說,我在 - [viewDidLoad]中設置了self.contentSizeForViewInPopover,並在 - [viewWillAppear:]中設置了popoverController.popoverContentSize。當然,這需要你保存一個指向popoverController的指針。

4

更好的方法是更改​​導航控制器的contentSizeForViewInPopover屬性。這樣你就不需要指向popover控制器的指針了。這裏是我是如何實現它在我的視圖控制器(在viewDidAppear):

self.contentSizeForViewInPopover = someSize; 
if (self.navigationController) 
    self.navigationController.contentSizeForViewInPopover = someSize; 

此實現也需要在視圖控制器不具有導航控制器的情況下照顧。如果您更改導航控制器的屬性而不更改視圖控制器的(自我),它將不起作用。另外,它在viewWillAppear方法中對我不起作用。

+0

這不是一個好的解決方案,因爲彈出窗口會以原始尺寸顯示,然後貼緊新計算的尺寸,看起來不太好。 – titaniumdecoy 2011-12-22 17:39:37

3

我們發現所選擇的解決方案是最好的,只是在視圖中引用彈出窗口可能是一個糟糕的設計理念。相反,請設置UINavigationController的委託並在navigationController:didShowViewController:animated:中處理它。在我們的例子中,最好在popover顯示的地方處理,因此已經可以訪問popoverController。

- (void)navigationController:(UINavigationController *)navigationController didShowViewController:(UIViewController *)viewController animated:(BOOL)animated 
{ 
    [popoverController setPopoverContentSize:viewController.contentSizeForViewInPopover]; 
} 
相關問題