2014-07-22 68 views
0

我有一個故事板的應用程序。我從故事板中的視圖控制器A開始。這個VC A有幾個視圖/子視圖。運行時,用戶可以從最初加載的位置修改/調整大小/移動這些子視圖。它工作正常。iOS7故事板模態segue更改子視圖

然後,用戶選擇並在故事板中選擇導致模態延續的動作,以查看控制器B.這會正常加載VC B.但是,我可以看到,就像模態轉換對B生成動畫一樣,VC A中由用戶修改的子視圖也會丟失......它們會恢復到最初加載的位置。然後,當VC B最終被解散,並且segue退回到VC A時,視圖保留在原始位置 - 這意味着用戶沒有得到與他之前具有的子視圖相同的安排。這是不好的連續性,不好的經驗。

這是怎麼回事?我怎樣才能通過模態繼續保持這些子視圖?我已經嘗試了幾個步驟,包括保存子視圖的框架(在viewWillDisappear中)並恢復它們(在viewWillAppear中),但它不起作用......這些子視圖不會在新位置重新繪製。我假設這些viewWill/viewDid實現與視圖移動不兼容。

奇數,我也有一個集合視圖,其內容在轉換過程中不會丟失......似乎只是這些子視圖位置/框架。

回答

0

這是因爲自動佈局。如果自動佈局開啓(默認情況下),那麼您應該通過調整其約束來移動或調整任何視圖的大小,而不是設置框架。如果您設置了框架,只要某些事情導致視圖重新繪製,視圖將恢復到由其約束定義的位置,而不是您設置的新位置。

+0

固定!謝謝。我沒有想到它是自動佈局,因爲我無論如何都去掉了所有的約束條件。我唯一需要做的其他改變是我必須用[[UIScreen mainScreen] bounds] .size.height替換我的self.view.window.frame.size.height的使用,以獲得我的一些屏幕位置數學...無論如何,這可能更準確。 –

0

我想你的GOT使用以下方法

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    UIViewController *destVC = (UIViewController *)segue.destinationViewController; 
    destVC.view.backgroundColor = [UIColor blueColor]; 
} 

我想你應該改變幀或通過這種方法上的數據到其他VC通過。