朋友给的场景,一个vc present一个nav包着一个vc,这个被present出来的vc要求横屏,dismiss里要竖屏,原代码关键部分
- (UIInterfaceOrientationMask)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window{
return self.window.rootViewController.supportedInterfaceOrientations;
}
@implementation ViewController
- (IBAction)btnClick:(UIButton *)sender {
ddddViewController *vc = [ddddViewController new];
UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:vc];
[self presentViewController:nav animated:YES completion:nil];
}
@end
@implementation ddddViewController
- (void)viewDidLoad {
[super viewDidLoad];
self.navigationItem.title = @"横屏";
}
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
[super touchesBegan:touches withEvent:event];
[self dismissViewControllerAnimated:YES completion:nil];
}
#pragma mark - 屏幕旋转
- (BOOL)shouldAutorotate{
return YES;
}
- (UIInterfaceOrientationMask)supportedInterfaceOrientations{
return UIInterfaceOrientationMaskLandscape;
}
- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation{
return UIInterfaceOrientationLandscapeRight;
}
@end
我的修改加入自定义nav
@implementation Nav
- (BOOL)shouldAutorotate {
return self.topViewController.shouldAutorotate;
}
- (UIInterfaceOrientationMask)supportedInterfaceOrientations {
return self.topViewController.supportedInterfaceOrientations;
}
- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation {
return self.topViewController.preferredInterfaceOrientationForPresentation;
}
@end
效果展示