“viewWillTransitionToSize:”当视图控制器以模态方式呈现时在 iOS 9 中未调用
Posted
技术标签:
【中文标题】“viewWillTransitionToSize:”当视图控制器以模态方式呈现时在 iOS 9 中未调用【英文标题】:"viewWillTransitionToSize:" not called in iOS 9 when the view controller is presented modally 【发布时间】:2015-10-01 09:34:04 【问题描述】:我展示了另一个视图控制器:
- (void)showModalView
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
MySecViewController *mySecViewController = [storyboard instantiateViewControllerWithIdentifier:@"secController"];
mySecViewController.delegate = self;
[self presentViewController:mySecViewController animated:YES completion:nil];
然后在呈现的UIViewController
中,方法viewWillTransitionToSize:withTransitionCoordinator:
在ios 8
中被调用,但在iOS 9
中没有被调用...
谢谢
【问题讨论】:
我也面临同样的问题。 【参考方案1】:在您当前的视图控制器中,如果您覆盖viewWillTransitionToSize:withTransitionCoordinator:
,请确保您调用super
。否则,此消息不会传播到子视图控制器。
对于Objective-C:
- (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator
[super viewWillTransitionToSize:size withTransitionCoordinator:coordinator];
// Your other code ...
还有斯威夫特:
override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator)
super.viewWillTransition(to: size, with: coordinator)
// Your other code ...
【讨论】:
【参考方案2】:人们已经解释过你必须调用super。我想添加一条信息,可能会帮助那些会面对我所面临的事情的人。
场景:父级 -> 子级(子级中未调用 viewWillTransition)
如果您的视图控制器是 child 视图控制器,则检查是否调用了 parent 视图控制器委托以及是否调用了 super。 否则不会传播到子视图控制器!
class ParentViewController: UIViewController
func presentChild()
let child = ChildViewController()
present(child, animated: false, compeltion: nil)
override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator)
super.viewWillTransition(to: size, with: coordinator) // If this line is missing your child will not get the delegate call in it's viewWillTransition
// Do something
class ChildViewController: UIViewController
// This method will not get called if presented from parent view controller and super is not called inside the viewViewWillTransition available there.
override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator)
super.viewWillTransition(to: size, with: coordinator)
//Do something
P.S - 这发生在我身上,因为父母的代码是由其他人编写的,他们忘记调用 super。
【讨论】:
为我工作!谢谢。但是super一般用于superClass。但在这里我可以看到 super 的不同实用程序。【参考方案3】:这似乎是一个微不足道的案例,但在使用 iPad 时,请检查用户是否未在设置或控制面板或侧面按钮中激活旋转锁定
【讨论】:
【参考方案4】:也许有点晚了,但我把这个放在这里是为了让任何人偶然发现这个令人沮丧的问题。
请记住,viewWillTransitionToSize:withTransitionCoordinator:
有时会在您期望的视图控制器的 presentingViewController
上被调用。 (如果那个视图控制器也有一个presentingViewController
,它可能会被调用)
我无法真正弄清楚这背后的逻辑,但这就是我的重点。所以我不得不在我的许多视图控制器中覆盖viewWillTransitionToSize:withTransitionCoordinator:
,如下所示:
- (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator
[super viewWillTransitionToSize:size withTransitionCoordinator:coordinator];
[self.presentedViewController viewWillTransitionToSize:size withTransitionCoordinator:coordinator];
【讨论】:
以上是关于“viewWillTransitionToSize:”当视图控制器以模态方式呈现时在 iOS 9 中未调用的主要内容,如果未能解决你的问题,请参考以下文章
viewWillTransitionToSize:withTransitionCoordinator: 未调用
为啥 `viewWillTransitionToSize` 中检索 SafeAreaInsets 的逻辑略有错误?
ViewWillTransitionToSize 在 Swift 3 中出现故障?
viewWillTransitionToSize 返回 iPhone 12 pro max 的错误尺寸 [重复]
viewWillTransitionToSize:withTransitionCoordinator: 和 layoutSubviews: 之间的交互