2

我有带有 4 个视图控制器的 tabBarController 应用程序。这个应用程序启用了横向,所以我在每个 viewcontroller.m 文件中都有 viewWillTransitionToSize:(CGSize)size 和TransitionCoordinator:(id)coordinator 来控制方向的变化。

我遇到的问题是,当我在第三个视图控制器中更改设备方向时,第二个视图控制器中的 viewWillTransitionToSize 被调用,因此运行了错误的代码。

第二个视图控制器的 viewWillTransitionToSize 怎么可能被调用?特别是,当它甚至还没有加载时。我知道它尚未加载,因为我 NSLog 它是 viewDidLoad 并且当我从第三个视图控制器更改方向时它会显示。

附加信息:第三个视图控制器的 viewWillTransitionToSize、viewWillAppear、viewWillDisappear 等中没有引用第二个视图控制器的代码。

我正在使用 Xcode 8.2.1 和 Objective-C 代码。请帮忙,谢谢。

4

2 回答 2

1

在处理转换之前测试以查看哪个UIViewController是选定的。UIViewController

在斯威夫特:

override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator)
{
    guard self == tabBarController?.selectedViewController else { return }

    // handle transition here
}

在我的情况下,UIViewController嵌入在 aUINavigationController所以我不得不稍微不同地处理它:

override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator)
{
    guard self.navigationController == tabBarController?.selectedViewController else { return }

    // handle transition here
}
于 2018-01-16T04:59:15.470 回答
0

我替换了每个实例

viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id)coordinator 

willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration 

为了避免上述 viewWillTransitionToSize 问题...

于 2017-03-07T02:34:02.680 回答