2009-12-30 61 views
0

我正在使用UINavigationController來管理我的UIViewControllers層次結構。對於這些UIViewController之一,我需要以編程方式更改其視圖邊界(取決於具體條件),所以我用setBounds,它工作正常。UIView和-setBounds問題

我的問題是這樣的:當我改變這個視圖邊界,然後推另一個UIViewController到UINavigationController堆棧,然後彈出最後一個UIViewController,我的界限改變丟失。我想這是因爲我的UIView被重繪,但我認爲邊界修改仍然是活的。

我可以在視圖出現後再次更改我的UIView邊界,但用戶會注意到視圖邊界的修改。

任何提示?這是常見的情況,還是因爲我的UIView從XIB加載,我錯過了一個參數或什麼?

謝謝:)

編輯:只注意到正確的(在動畫)

回答

0

你可能想要做所有的邊界設定(包括第一次)的-viewWillAppear:。在初始推送和流行情況下,在屏幕上都應該調用它。

+0

這將是最好的選擇,但不幸的是我需要改變從我的UINavigationController委託邊界(因爲這個邊界修改是獨立於視圖;修改可能發生在我的任何意見) – Vivi 2009-12-30 16:53:36

+0

等效的委託方法是navigationController:willShowViewController:animated :.當你重新設置邊界時發生了什麼? – 2009-12-30 17:14:06

+0

當我更改willShowViewController方法中的邊界時,我的界限在顯示之前顯然被覆蓋,所以此刻,界限修改在didShowViewController中完成 – Vivi 2010-01-04 15:53:30

0

你的看法可能已自動調整設定的推新的UIViewController到堆棧之前我UIView邊界被改變。如果你不希望出現這種情況,設置自動尺寸爲0:

myView.autoresizingMask = 0; 
+0

剛剛嘗試,但我仍然有這個問題 – Vivi 2009-12-30 16:15:27

0

你在哪裏改變界限?也許你應該把它放在viewWillAppear/didAppear之類的東西中,這樣每次下一個視圖控制器從堆棧中彈出時,邊界都會被改變?

+0

我的界限由UINavigationController委託更改;我正在用willShowViewController和didShowViewController方法來觀察我的情況。 – Vivi 2009-12-30 16:49:04

+0

爲什麼不在willShowViewController中設置一個變量,該變量是在viewWillAppear中讀取的,然後根據該值修改邊界?無論如何,從Nav Controller Delegate修改特定的視圖聽起來有點奇怪。 – bpapa 2009-12-30 17:06:35

+0

我同意這很奇怪,但這是我們發現創建獨立於應用程序的廣告顯示器的最佳解決方案;我們不想改變應用程序和它的視圖控制器來這樣做,所以我需要在這個委託中完成一切。當我更改willShowViewController方法中的界限時,我的界限在顯示之前顯然被覆蓋,所以此刻界限修改在didShowViewController中完成(這就是用戶可能注意到修改的原因) – Vivi 2010-01-04 15:52:41