&引用;ViewWillTransitionOnSize:“视图大小”;当视图控制器以模式显示时,在iOS 9中未调用
我从另一个视图控制器演示了一个视图控制器:&引用;ViewWillTransitionOnSize:“视图大小”;当视图控制器以模式显示时,在iOS 9中未调用,ios,uiviewcontroller,screen-orientation,autorotate,presentviewcontroller,Ios,Uiviewcontroller,Screen Orientation,Autorotate,Presentviewcontroller,我从另一个视图控制器演示了一个视图控制器: - (void)showModalView { UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil]; MySecViewController *mySecViewController = [storyboard instantiateViewControllerWithIdentifier:@"secController"];
- (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
中,将在ios8
中调用方法viewwilltransitionsize:withtransitionocordinator:
,而不是在ios9
中调用方法
谢谢在您当前的视图控制器中,如果您使用TransitionCoordinator:覆盖
视图将TransitionOnSize:。否则,此消息将不会传播到子视图控制器
对于目标-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 ...
}
这似乎是一个微不足道的例子,但在使用iPad时,请检查用户是否未在设置或控制面板或侧边按钮中激活旋转锁可能有点晚了,但我在这里为遇到这一令人沮丧问题的任何人提供了这一信息
请记住,viewwilltransitiononsize:withtransitionocordinator:
有时会在视图控制器的presentingViewController
上被调用。(如果该视图控制器也有一个presentingViewController
,它可能会被调用)
我真的搞不懂这背后的逻辑,但这就是我的问题所在。因此,在我的许多视图控制器中,我必须使用TransitionCoordinator:
覆盖ViewWillTransitionOnSize:
- (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator {
[super viewWillTransitionToSize:size withTransitionCoordinator:coordinator];
[self.presentedViewController viewWillTransitionToSize:size withTransitionCoordinator:coordinator];
}
-(void)视图将转换大小:(CGSize)带有转换协调器的大小:(id)协调器{
[super ViewWillTransitionSize:size with TransitionCoordinator:coordinator];
[self.presentedViewController视图将转换大小:带有转换协调员的大小];
}
人们已经解释过,你必须呼叫super。我想补充一条信息,这可能会帮助那些本该面对我所面对的人
场景:父级->子级(viewWillTransition未在子级中调用)
如果视图控制器是子视图控制器,则检查是否调用了父视图控制器委托,以及是否在那里调用了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
}
}
另外,这发生在我身上,因为父母的代码是别人写的,他们忘了叫super。我也面临同样的问题。为我工作!谢谢但是super通常用于超类。但在这里我可以看到一个不同的超级实用程序。