我有一個UINavigationController,它的視圖嵌入到UIViewController中。當我旋轉設備時,NavigationController完美地收到了事件 didRotate
事件。但是,在UINavigationController內的當前可見視圖控制器之前推送的任何UIViewController都不會收到旋轉事件。如何在UINavigationController中正確旋轉viewcontrollers?
這是問題: 雖然第二個viewController在navigationController中是可見的,但如果我旋轉設備,ViewController會根據旋轉更改其佈局。當我彈出視圖控制器返回到第一個視圖控制器時,第一個視圖控制器根據縱向佈局顯示自己,因爲它不會調用我對旋轉視圖的重新佈局方法。
我不想增加觀察員的旋轉變化,因爲它通常已正確地表現爲默認的旋轉方式通常被自動調用...
我能在這種情況下怎麼辦?
我已經通過手動調用了willRotate函數來完成它,但我不覺得這是好的。
-(void)viewWillAppear:(BOOL)animated{
[super viewWillAppear:animated];
UIInterfaceOrientation io=[[UIApplication sharedApplication] statusBarOrientation];
[self willRotateToInterfaceOrientation:io duration:0.3];
for(int i=0;i<self.childViewControllers.count;i++){
[[self.childViewControllers objectAtIndex:i]willRotateToInterfaceOrientation:io duration:0.3];
}
}
謝謝Andreas,我已經將navigationController添加到parentViewController中,它會在輪換髮生時得到通知,但只有通知導航控制器的可見viewController – frankish
@frankish通知如何?我創建了一個複製您的案例的測試項目,並且自動佈局一直在工作完美(使用自動更正時sizingMasks或'UIView'的'layoutSubviews'方法)。 –
當設備旋轉到橫向模式時,我會從屏幕底部向右上方移動一些按鈕。但是如果我在旋轉設備之前推動其他viewcontroller,旋轉之後,我通過彈出當前viewcontroller來回到前一個viewcontroller,並且我看到viewcontroller沒有將我的按鈕移動到右上角,因爲我在「willRotate」函數上手動執行該操作。但是如果我在視圖控制器可見的情況下做同樣的旋轉。一切都很完美。 – frankish