7

我有UINavigationController一个根UIViewController(“根”)。

根视图控制器推送另一个UIViewController“孩子”。当“孩子”UIViewController出现在屏幕上时,我旋转设备并期望“根”视图控制器相应地调整大小,但这并没有发生。在根视图控制器中放置断点后:

-(void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator {
    [super viewWillTransitionToSize:size withTransitionCoordinator:coordinator];
}

我看到大小错误,并且根视图控制器没有正确调整以适应更改。

有没有人经历过这种行为?

代码是这样的:

@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 的打印屏幕 - 这是来自模拟器,但在设备上的行为是相同的。

在此处输入图像描述

4

2 回答 2

2

我的项目也有同样的问题。似乎 UINavigationController 和 UITabBarController(可能都是 viewController?)在您调用时给那里的孩子错误的大小:

'[super viewWillTransitionToSize:size withTransitionCoordinator:coordinator];'

我通过覆盖 tabBarController 和导航栏控制器子类中的“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];
    }
}

我不确定这是最好的方法,如果你找到更好的方法,请告诉我。

于 2015-02-23T13:52:00.583 回答
0

可能只有窗口旋转。如果你这样打印,它总是正确的,因为我已经测试过了。

[coordinator animateAlongsideTransition:^(id<UIViewControllerTransitionCoordinatorContext> context)
 {

 } completion:^(id<UIViewControllerTransitionCoordinatorContext> context)
 {
     UIWindow *screen = [[[UIApplication sharedApplication] delegate] window];
     CGSize mainWindowSize = screen.bounds.size;
     NSLog(@"Main window size is %@",NSStringFromCGSize(mainWindowSize));

 }];
于 2014-11-12T15:57:13.970 回答