viewWillTransitionToSize 在 TabBarController 中调用错误的 ViewController
Posted
技术标签:
【中文标题】viewWillTransitionToSize 在 TabBarController 中调用错误的 ViewController【英文标题】:viewWillTransitionToSize Calls Wrong ViewController in TabBarController 【发布时间】:2017-02-24 03:01:25 【问题描述】:我有带有 4 个视图控制器的 tabBarController 应用程序。这个应用程序启用了横向,所以我在每个 viewcontroller.m 文件中都有 viewWillTransitionToSize:(CGSize)size 和TransitionCoordinator:(id)coordinator 来控制方向变化。
我遇到的问题是,当我在第三个视图控制器中更改设备方向时,第二个视图控制器中的 viewWillTransitionToSize 被调用,因此运行了错误的代码。
第二个视图控制器的 viewWillTransitionToSize 怎么可能被调用?特别是,当它甚至还没有加载时。我知道它尚未加载,因为我 NSLog 它是 viewDidLoad 并且当我从第三个视图控制器更改方向时它会显示。
附加信息:第三个视图控制器的 viewWillTransitionToSize、viewWillAppear、viewWillDisappear 等中没有引用第二个视图控制器的代码。
我正在使用 Xcode 8.2.1 和 Objective-C 代码。请帮忙,谢谢。
【问题讨论】:
尝试添加相关代码(例如,尝试用最少的设置重新复制,可能只有 2 个视图控制器和一个标签栏控制器,没有故事板等) 尝试将其简化为重现问题的最小示例并将其放在 GitHub 上。 【参考方案1】:在处理转换之前测试查看哪个UIViewController
是选定的UIViewController
。
在斯威夫特中:
override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator)
guard self == tabBarController?.selectedViewController else return
// handle transition here
在我的情况下,UIViewController
嵌入在 UINavigationController
中,所以我不得不稍微不同地处理它:
override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator)
guard self.navigationController == tabBarController?.selectedViewController else return
// handle transition here
【讨论】:
【参考方案2】:我替换了
的每个实例viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id)coordinator
与
willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
为了避免上述 viewWillTransitionToSize 问题...
【讨论】:
willAnimateRotationToInterfaceOrientation
已弃用,因此没有解决方案。
它完成了工作并且它没有在问题导航器上显示为问题。我也没有找到任何方法来获取 viewWillTransitionToSize... 触发它所在的每个视图控制器的每个 viewDidLoad。以上是关于viewWillTransitionToSize 在 TabBarController 中调用错误的 ViewController的主要内容,如果未能解决你的问题,请参考以下文章
viewWillTransitionToSize:withTransitionCoordinator: 未调用
为啥 `viewWillTransitionToSize` 中检索 SafeAreaInsets 的逻辑略有错误?
ViewWillTransitionToSize 在 Swift 3 中出现故障?
viewWillTransitionToSize 返回 iPhone 12 pro max 的错误尺寸 [重复]
viewWillTransitionToSize:withTransitionCoordinator: 和 layoutSubviews: 之间的交互