私は別のものからビューコントローラを提示します:
- (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
では呼び出されません...
ありがとう
現在のビューコントローラーで、viewWillTransitionToSize:withTransitionCoordinator:
、必ずsuper
を呼び出してください。それ以外の場合、このメッセージは子View Controllerに伝播されません。
Objective-Cの場合:
- (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator {
[super viewWillTransitionToSize:size withTransitionCoordinator:coordinator];
// Your other code ...
そしてSwift:
override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {
super.viewWillTransition(to: size, with: coordinator)
// Your other code ...
}
superを呼び出さなければならないことはすでに説明されています。私が直面したことを直面していた人々を助けるかもしれない情報を追加したいと思います。
ビューコントローラーが子ビューコントローラーである場合、親ビューコントローラーデリゲートが呼び出され、そこで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
}
}
PS-これは私が親のコードを記述しなかったために起こりました。
少し遅いかもしれませんが、このイライラする問題に出くわした人のためにここに置いておきます。
それを念頭に置いて 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];
}
些細なケースのように見えるかもしれませんが、iPadを使用している場合は、ユーザーが設定、コントロールパネル、またはサイドボタンで回転ロックを有効にしていないことを確認してください