iOS8 - 在 UINavigationController 上推送 UIViewController 并旋转设备后,以前的 View Controller 中的大小错误

标签 ios objective-c uiviewcontroller uinavigationcontroller viewwilltransitiontosize

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

enter image description here

这是旋转设备后大小的 NSLog 的打印屏幕 - 这是来自模拟器,但行为在设备上是相同的。

enter image description here

最佳答案

我的项目也有同样的问题。 似乎 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/

相关文章:

swift - 根据所选的 UITableViewCell 打开多个 swift 文件之一

swift - 在变量上使用 didSet 时如何停止 nil 可选值?

iOS Swift Webview 不显示

ios - 我们可以将 NSURLRequest 直接存储到 Core Data 中吗?

objective-c - 测试 NSImage/CGImageRef 是否完全透明的最佳方法

iphone - iOS Advanced Audio API 解压格式

objective-c - 通过 lldb 在 NSMutableDictionary 中设置对象时出错

ios - 如何访问UIView中的UIScrollView中的所有UIButton?

ios - 如果用户最初拒绝为您的应用程序提供 Siri 支持,他们以后如何启用它?

ios - 使用 UICollectionView 时 UITableView 的 NSInternalInconsistencyException?