iOS8 iOS7和iOS6防止旋转呈现的视图控制器

米哈尔·沙茨(Michal Shatz)

我有几个使用presentViewController:animated:方法以模态形式呈现的视图控制器。我不想让应用程序在iPad上呈现时旋转,因为它们使用FXBlurView都具有模糊的背景,这使旋转变得一团糟,而且因为有时旋转呈现的视图会使呈现的视图变得混乱。

我需要支持iOS6、7和8,并且除了私有API setOrientation:方法之外找不到任何解决方案。

迈克尔·凯斯勒

我发现的唯一解决方案是创建一个导航控制器子类,并在此导航控制器中包含模态视图控制器。
这意味着您将必须提供导航控制器,该控制器将具有您最初想要呈现的根视图控制器。

这是非旋转(人像)导航控制器的示例实现:

@implementation NonRotatingNavigationController

- (BOOL)shouldAutorotate {
    return NO;
}

- (NSUInteger)supportedInterfaceOrientations {
    return UIInterfaceOrientationMaskPortrait;
}
- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation {
    return UIInterfaceOrientationPortrait;
}

@end

您也可以“询问”显示的视图控制器,而不是确定支持哪种方向。
像这样:

@implementation NonRotatingNavigationController

- (BOOL)shouldAutorotate {
    return [[[self viewControllers] lastObject] shouldAutorotate];
}

- (NSUInteger)supportedInterfaceOrientations {
    return [[[self viewControllers] lastObject] supportedInterfaceOrientations];
}
- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation {
    return [[[self viewControllers] lastObject] preferredInterfaceOrientationForPresentation];
}

@end

编辑(添加了替代解决方案)

另一个解决方案是添加一个单独的窗口,其中将包含视图控制器。
这次,您将必须在视图控制器本身内部实现旋转方法,并将其设置为新窗口的根视图控制器。

这是窗口创建代码(重要的是,该窗口将归某人所有-例如,原始视图控制器中的强属性-否则它将被释放,您将一无所获):

@interface ViewController ()
@property (nonatomic, strong) UIWindow *modalWindow;
@end

@implementation ViewController

- (IBAction)buttonTapped:(id)sender {

    NonRotatingViewController *vc = [[self storyboard] instantiateViewControllerWithIdentifier:@"NonRotatingViewController"];

    UIWindow *modalWindow = [[UIWindow alloc] initWithFrame:self.view.window.frame];
    modalWindow.windowLevel = UIWindowLevelAlert;
    modalWindow.backgroundColor = [UIColor clearColor];
    [modalWindow setRootViewController:vc];
    [modalWindow makeKeyAndVisible];

    self.modalWindow = modalWindow;

}

@end

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

iOS7 / IOS8在视图控制器中仅允许纵向

来自分类Dev

iOS7 / IOS8在视图控制器中仅允许纵向

来自分类Dev

ios7呈现视图控制器在呈现时不会旋转,导致状态栏消失

来自分类Dev

在iOS8中从操作表的委托模态呈现视图控制器-iOS11

来自分类Dev

iOS7 / iOS8中的不同视图外观

来自分类Dev

iOS7和iOS8 segue.destinationViewController

来自分类Dev

iOS7和iOS8上的Healthkit

来自分类Dev

不同的costraints beetwen ios7和ios8

来自分类Dev

iOS8 MGSplitViewController替代

来自分类Dev

ios8 _updateInterfaceOrientationFromDeviceOrientation崩溃

来自分类Dev

iOS8 NSXMLParser崩溃

来自分类Dev

iOS8键盘方向

来自分类Dev

iOS8 layoutMargin被忽略

来自分类Dev

iOS8的KeychainItemWrapper崩溃

来自分类Dev

iOS8 AlertViewController问题

来自分类Dev

ios8中的popToRootViewControllerAnimated

来自分类Dev

iOS8 layoutMargin被忽略

来自分类Dev

iOS8删除ALAsset

来自分类Dev

iOS8中的ModalViewController

来自分类Dev

自动布局CGAffineTransform iOS7 iOS8

来自分类Dev

NSLayoutConstraint layoutMargin从iOS7更改为iOS8

来自分类Dev

在iOS7中处理一个视图控制器的自动旋转

来自分类Dev

注册解析通知iOS7和iOS8,编译器警告

来自分类Dev

在iOS8的Popover中呈现UIAlertController

来自分类Dev

Xamarin iOS 防止特定视图控制器的旋转

来自分类Dev

防止在我的应用程序IOS 6的每个视图控制器上自动旋转

来自分类Dev

iOS8全屏视图已关闭

来自分类Dev

在滚动视图内部重用视图控制器。Swift iOS8开发

来自分类Dev

iOS8模拟器错误