我有一个UINavigationController,上面有两个UIViewControllers(A和B)。从A中,我把B推到了堆栈上。然后用户重新调整设备方向。我需要在A上移动一些屏幕上的东西(按钮等),以便在新的方向上可见。
我发现-shouldAutorotateToInterfaceOrientation被调用了A和B(并且返回YES)。但-will / -didRotateFromInterfaceOrientation只在可见的ViewController(B)上被调用。当B从堆栈中弹出时,A以新的(正确的)方向显示,但没有将按钮按需要移动。
为了解决这个问题,我发现自己实现以下模式:
在头文件中:
基本上,我正在检查-viewWillAppear中是否更改了方向,并在必要时更新UI。它完全正常,但这似乎(a)很繁琐,而且(b)我的各种类(如A)之间有很多重复的代码。我可以通过将代码移动到公共超类来解决(b),但这仍然似乎是我不必做的事情。
在导航堆栈上方的视图中移动我的按钮是否有更好的方法?如果需要检查IB中的内容,则我的视图来自.xib。我应该只设计我的视图,以便在方向更改时不需要移动按钮吗?
谢谢!
我发现-shouldAutorotateToInterfaceOrientation被调用了A和B(并且返回YES)。但-will / -didRotateFromInterfaceOrientation只在可见的ViewController(B)上被调用。当B从堆栈中弹出时,A以新的(正确的)方向显示,但没有将按钮按需要移动。
为了解决这个问题,我发现自己实现以下模式:
在头文件中:
@interface A : UIViewController {
// ...
UIInterfaceOrientation layoutOrientation;
}
// ...
- (void)orientationChanged;
@end
在 .m 文件中:
- (void)viewDidLoad {
// ...
layoutOrientation = self.interfaceOrientation;
}
- (void)viewWillAppear:(BOOL)animated {
// ...
if (layoutOrientation != self.interfaceOrientation) {
[self orientationChanged];
}
}
- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
[self orientationChanged];
}
- (void)orientationChanged {
// move my buttons
layoutOrientation = self.interfaceOrientation;
}
基本上,我正在检查-viewWillAppear中是否更改了方向,并在必要时更新UI。它完全正常,但这似乎(a)很繁琐,而且(b)我的各种类(如A)之间有很多重复的代码。我可以通过将代码移动到公共超类来解决(b),但这仍然似乎是我不必做的事情。
在导航堆栈上方的视图中移动我的按钮是否有更好的方法?如果需要检查IB中的内容,则我的视图来自.xib。我应该只设计我的视图,以便在方向更改时不需要移动按钮吗?
谢谢!