当前位置: 首页 > 知识库问答 >
问题:

为什么在iOS 8中,我的应用程序在发布时方向错误?

吴唯
2023-03-14

iOS 7之前的应用程序工作正常。我今天用Xcode 6尝试了它,当我运行它时,我有一个令人不快的惊喜:(:

你知道iOS 8有什么变化吗?:/我使用了以下定向方法:

  • (N SU整数)支持的接口方向
  • (BOO L)应该自动旋转
  • (BOO L)应自动旋转到界面方向:(UI界面方向)界面方向

编辑:

我刚刚发现这个方法:

- (NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window 
{
 return UIInterfaceOrientationMaskLandscape;
}

现在我的第一个视图控制器工作正常:)。问题是当我显示一个模态(改变了UIInterfaceOrientationMaskAll中的方法集)时,会重新制作屏幕截图的丑陋效果。准确地说,我在这种模式下改变了我的方法:

- (NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window
{
    if(self.restrictRotation)
    {
        return UIInterfaceOrientationMaskLandscape;
    }    
    else
    {
        return UIInterfaceOrientationMaskAll;
    }
}


// THIS IS A DELEGATE OF MODAL VIEW CONTROLLER
- (void)updateInterfaceAfterDocumentPreviewViewController
{
    NSLog(@"updateInterfaceAfterDocumentPreviewViewController");

    [[UIApplication sharedApplication]     setStatusBarOrientation:UIInterfaceOrientationLandscapeLeft];

    AppDelegate* appDelegate = (AppDelegate*)[UIApplication sharedApplication].delegate;
    appDelegate.restrictRotation = YES;
}

共有3个答案

王岳
2023-03-14

我对“加载屏幕”也有同样的问题。这对我来说很有用。(请注意:我的应用程序仅支持iOS 7或更高版本的横向模式。):

    CGRect theFrame = self.view.frame;
    if ([[[UIDevice currentDevice] systemVersion] floatValue] < 8.0) {
        CGRect screenBounds = [[UIScreen mainScreen] bounds];
        theFrame.origin = CGPointZero;
        theFrame.size.width = screenBounds.size.height;
        theFrame.size.height = screenBounds.size.width;
    }

    NSLog(@"%@", [NSNumber valueWithCGRect:theFrame]);
    self.loadingScreen = [[UIView alloc] initWithFrame:theFrame];

如果您的应用程序支持纵向定位,请参考Mike Hay的答案,并了解“计算正确的applicationFrame还有很长的路要走”:https://stackoverflow.com/a/18072095/4108485

希望这有帮助。

史旺
2023-03-14

问题似乎是设置窗口时调用的顺序。在应用程序委托的didFinishLaunchingWithOptions方法中指定根视图控制器之前,需要调用makeKeyAndVisible。以下工作:

self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
[self.window makeKeyAndVisible];
self.window.rootViewController = self.myMainViewController;

但是如果您将顺序更改为:

self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
self.window.rootViewController = self.myMainViewController;
[self.window makeKeyAndVisible];

你得到了你正在经历的行为。

周墨一
2023-03-14

请尝试以下代码

在AppDelegate的didFinishLaunchingWithOptions中

self.window.rootViewController = self.viewController;

[self.window makeKeyAndVisible];

[self.window setFrame:[[UIScreen mainScreen] bounds]]; //Add
 类似资料:
  • 我尝试以下代码,但它显示错误消息: 错误消息:- 处理该命令时发生未知的服务器端错误。(警告:服务器未提供任何stacktrace信息)

  • 我试图调用ViewModel中片段中的函数,但每次调用时它都会崩溃,我不知道为什么。下面是代码: 呼吁协程: 函数的代码: 如果我不使用协同程序,只使用我收到一个错误,说我必须从其他挂起函数或协同程序调用这个函数。 这就是错误: 我的ViewModel是: 在我称之为协程的片段中,我这样声明它:

  • 问题内容: 首先了解应用程序的一些背景知识。我有一个应用程序通过线程池并行处理许多独立的任务。现在线程池正在挂起。 以下是我的线程转储的摘录,我的pool-2中的所有线程都被“ pool-2-thread-78”阻止了。尝试写入控制台似乎已锁定,我觉得这很奇怪。谁能为我说明情况? 编辑 :平台详细信息Java版本“ 1.6.0_07” Java(TM)SE运行时环境(内部版本1.6.0_07-b0

  • 我试图隐藏Actionbar并改用工具栏,但如果我更改Theme.appcompat.light.NoActionBar,它确实会隐藏,但应用程序在行setContentView(r.layout.activity_main)处崩溃; 尽管它确实使用getSupportActionBar()隐藏。hide();但我不能用这个代码 Toolbar Toolbar=(Toolbar)findViewB

  • 我对一些代码进行了分析,并对花费了这么多时间感到惊讶。 但我发现这快了大约5倍: 下面是Math.min的代码以供参考: 注意:我的用例是对称的,上面的情况都适用于max,而不是min。 我在我的应用程序中添加了以下代码,以尝试获得更好的数据: 这将打印每个新触摸事件的运行比率。当我在屏幕上旋转手指时,首先记录的比率是或或。这让我觉得这个测试不是很准确地测量时间。随着收集到更多的数据,比率往往在和

  • 我正在使用异步套接字用C#编写一个多客户端/服务器应用程序。连接上的每个客户端发送10个项目。问题是,当快速启动大量客户机时,每个客户机发送的条目都少于10个,有时什么也不发送,服务器只记录它们的连接。