是否有可能有内部的UINavigationController viewControllers不同的

2019-09-17 20:51发布

我希望所有视图控制器仅支持肖像模式,除了一个视图控制器可以称之为“LandscapeSupportViewController”也应该支持横向模式。

问题是,当我在LandscapeSupportViewController是在横向模式,然后按只支持肖像模式一个新的视图控制器,该推视图控制器会在横向模式下也! 我怎么能强迫它变为纵向?

我看到做一些应用程序,采取例如Skype的iPhone应用程序,邮件选项卡仅是肖像- >然后如果按输入本身你会得到一个视图控制器的消息支持横向也因为它是有意义的启用横向模式时,用户被聊天 - >然后如果按查看个人简介,一个新的视图控制器将被推但在肖像! 同样发生,如果你回去,你将被迫返回人像,即使你从横向来了...

谢谢

Answer 1:

我曾经让学生试着来完成你要完成什么,以及大量的研究后,普遍的共识是:这是一个坏主意,并需要大量的(App Store的法律)黑客来完成,并且仍然不练得太漂亮了(状态栏,例如螺丝了)。 您可以在Skype的应用发现,当你进入IM部分,旋转为横向,和回击,用户界面“卡”,或者有点被立即重新加载。

这不是一个良好的用户体验,并且我建议你重新考虑你的设计,更符合苹果公司建议行。



Answer 2:

如果我没有得到你想要的在一定条件下改变设备的方向。

[[UIApplication sharedApplication] setStatusBarOrientation:UIDeviceOrientationPortrait animated:NO];

使用上述命令行设置自己的方向,只是把此行if条件内。 条件是取决于你。

谢谢!!



Answer 3:

写这行你推的viewController其仅支持人像从landscapeViewController前

[appdel.navigationController.view removeFromSuperview];// This navcontroller used with rootviewcontroller
[[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationPortrait];
[ [UIApplication sharedApplication].self.delegate.window addSubview:appdel.navigationController.view];
self.navigationController.navigationBar.hidden=NO;


Answer 4:

这里是一个解决方案。 您可以添加UINavigationController的一个类别,其管理的视图控制器方向。 请参见下面的代码:

@interface UINavigationController (MyViewOrientations)
@end

@implemetation UINavigationController (MyViewOrientations)

- (BOOL)supportLandscapeModeForViewController:(UIViewController *)controller {
    return [controller isKindOfClass:[LandscapeSupportViewController class]]
}

- (NSUInteger)supportedInterfaceOrientation {
    UIViewController *controller = [self visibleViewController];
    NSUInteger orientationMasks = UIInterfaceOrientationMaskPortrait
    if([self supportLandscapeModeForViewController:controller]) {
        orientationMasks |= UIInterfaceOrientationMaskLandscapeLeft;
        orientationMasks |= UIInterfaceOrientationMaskLandscapeRight;
    }
    return orientationMasks;
}

- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation {
    UIViewController *controller = [self visibleViewController];
    if([self supportLandscapeModeForViewController:controller]) {
        return UIInterfaceOrientationLandscapeLeft; // Your call
    }
    else {
        return UIInterfaceOrientationPortrait;
    }
}

- (BOOL)shouldAutorotate {
    UIViewController *controller = [self visibleViewController];
    return [self supportLandscapeModeForViewController:controller];
}
@end

如果情况比较复杂,不同的观点支持不同的方向。 您可以覆盖在你的视图控制器“supportedInterfaceOrientation”,“preferredInterfaceOrientationForPresentation”,“shouldAutorotate”,并委托由UINavigationController的类别代码调用与“visibleViewController”。



文章来源: Is it possible to have different orientations for viewControllers inside UINavigationController?