我想从纵向父级以横向模式加载 ViewController。父级已固定为纵向,它不会改变其方向,但是无论设备方向如何,从父级推送的子视图控制器也会加载纵向(如果我们再旋转设备几次,则为孩子正确设置方向)。那么如何在初始时间本身正确加载孩子。
或者
有什么方法可以以编程方式设置方向,以便我可以在 ViewWillAppear 方法中使用它。谢谢。
我想从纵向父级以横向模式加载 ViewController。父级已固定为纵向,它不会改变其方向,但是无论设备方向如何,从父级推送的子视图控制器也会加载纵向(如果我们再旋转设备几次,则为孩子正确设置方向)。那么如何在初始时间本身正确加载孩子。
或者
有什么方法可以以编程方式设置方向,以便我可以在 ViewWillAppear 方法中使用它。谢谢。
在您的孩子 UIViewController 设置这两个方法:
- (BOOL)shouldAutorotate
{
return NO;
}
- (NSUInteger)supportedInterfaceOrientations
{
return UIInterfaceOrientationMaskLandscapeLeft;
}
在父 UIViewController 做:
[self.navigationController presentViewController:controller animated:YES completion:nil];
代替:
[self.navigationController pushViewController:controller animated:YES];
如果您想在孩子中显示导航栏:
DetailViewController *controller = [self.storyboard instantiateViewControllerWithIdentifier:@"DetailViewController"];
controller.title = @"Child";
您必须使用上面提到的两种方法将 UINavigationController 子类化,而不是在子视图控制器中。
MyNavigationController *nav = [[MyNavigationController alloc] initWithRootViewController:controller];
[self.navigationController presentViewController:nav animated:YES completion:nil];
试试这个示例项目............
如果我做对了,您只需将此方法添加到您的子视图控制器
- (BOOL)shouldAutorotate {
return NO;
}
- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation {
return UIInterfaceOrientationLandscapeLeft / Right;
}
展示您的视图使用
[self presentViewController:viewController...]
您的视图以横向模式呈现。
在视图中使用这个已经出现或将出现,
[[UIDevice currentDevice]performSelector:@selector(setOrientation:) withObject:(__bridge id)((void *)UIInterfaceOrientationLandscapeRight)];
在此之前启用 .plist 中的所有 4 个方向
在 AppDelegate.m 上添加这个
- (NSUInteger)application:(UIApplication*)application
supportedInterfaceOrientationsForWindow:(UIWindow*)window
{
UIViewController *cont=self.vc;
if([cont isKindOfClass:[YourClass class]])
{
NSUInteger orientations = UIInterfaceOrientationMaskLandscapeRight;
NSLog(@"Landscape");
return orientations;
}
NSUInteger orientations = UIInterfaceOrientationMaskPortrait;
return orientations;
}