我有一个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