iOS 11强制UIViewController到纵向模式不起作用

时间:2017-09-08 20:56:51

标签: ios objective-c iphone uiviewcontroller rotation

基于Apple论坛上的the discussing,此方法适用于iOS< 11设备(但> iOS 6)

  

这可以防止任何轮换。

- (BOOL)shouldAutorotate
{
    return NO;
}
  

这只会旋转为纵向(正面朝上或上下颠倒)。

- (NSUInteger)supportedInterfaceOrientations
{
    return UIInterfaceOrientationMaskPortrait + UIInterfaceOrientationMaskPortraitUpsideDown;
}

但是,它无法在iOS 11 Beta 9上运行;

如果您的应用程序允许所有方向,但只想使用此方法将MainViewController设置为Portrait。

如果您按住设备架构并启动应用程序,则在启动屏幕后,statusBar将位于屏幕顶部(横向显示时),并且您的视图仍为纵向。

如果您使用方法切换rootViewController like this answer,您将结束以横向强制显示的横向渲染视图。

像这样的一些示例图:

enter image description here

齿轮图标位于正确的位置,但它来自库。其他一切看起来像风景。

由于

2 个答案:

答案 0 :(得分:1)

没有足够的声誉点来回复@Vishal16 answer ...它对我有所帮助。

我想允许iPad上的所有视图控制器上的所有方向和iPhone上的大多数视图控制器的肖像,我希望它在swift中,所以这是我稍微修改过的版本:

在您的app delegate中:

var isPortrait = true

func application(_ application: UIApplication, supportedInterfaceOrientationsFor window: UIWindow?) -> UIInterfaceOrientationMask {

    if UIDevice.current.userInterfaceIdiom == .pad || !isPortrait {
        return .all
    }
    return .portrait
}


然后准备(对于segue:......

    (UIApplication.shared.delegate as? AppDelegate)?.isPortrait = true

使用false表示在segue上旋转视图控制器,对其他人使用true。

享受!

答案 1 :(得分:0)

当您呈现任何viewController时,AppDelegate会自动调用此方法进行强制旋转。我正在使用它,它在我的所有应用程序中完美无瑕

<强> AppDelegate.m

- (UIInterfaceOrientationMask)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window
{
   if (self.isPotrait) {
       return UIInterfaceOrientationMaskPortrait|UIInterfaceOrientationMaskPortraitUpsideDown;
   }
   return UIInterfaceOrientationMaskAll;
}

定义属性:

@property (assign, nonatomic) BOOL isPotrait;

在prepareForSegue方法中调用如下:

if ([segue.identifier isEqualToString:@"segue_ID"]){
     AppDelegate *appDelegate = (AppDelegate *)[UIApplication sharedApplication].delegate;
     [appDelegate setIsPotrait:true];
     YourViewController *yourVC = [segue destinationViewController];
}

希望这对你有所帮助。 快乐的编码:)