我有一个 UINavigationController
和一个根 UIViewController
(“root”)。
Root View Controller 推送另一个 UIViewController
“child”。当“子”UIViewController
在屏幕上时,我旋转设备并期望“根” View Controller 相应地调整大小,但这并没有发生。在 Root View Controller 中放置断点后:
-(void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator {
[super viewWillTransitionToSize:size withTransitionCoordinator:coordinator];
}
我看到尺寸不对, Root View Controller 没有正确调整以适应变化。
有没有人经历过这种行为?
代码如下:
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
}
-(void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator {
/// The size is wrong if this view controller is off screen
[super viewWillTransitionToSize:size withTransitionCoordinator:coordinator];
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
@end
这是旋转设备后大小的 NSLog 的打印屏幕 - 这是来自模拟器,但行为在设备上是相同的。
最佳答案
我的项目也有同样的问题。 似乎 UINavigationController 和 UITabBarController(也许都是 viewController?)在您调用时给 children 错误的尺寸:
'[super viewWillTransitionToSize:size withTransitionCoordinator:coordinator];'
我通过覆盖 tabBarController 和导航栏 Controller 子类中的“viewWillTransitionToSize:withTransitionCoordinator:”解决了这个问题(两者的代码相同)。
- (void)viewWillTransitionToSize:(CGSize)size
withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator
{
for (UIViewController* aViewController in self.viewControllers)
{
[aViewController viewWillTransitionToSize:size
withTransitionCoordinator:coordinator];
}
if ([self presentedViewController])
{
[[self presentedViewController] viewWillTransitionToSize:size
withTransitionCoordinator:coordinator];
}
}
我不确定这是最好的方法,如果您发现更好的方法,请告诉我。
关于iOS8 - 在 UINavigationController 上推送 UIViewController 并旋转设备后,以前的 View Controller 中的大小错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26890204/