Xcode 6 iOS 8轮换问题-屏幕上有很大的空白



我在Xcode 6中的iPad应用程序遇到了一个非常奇怪的问题。以前(使用Xcode 5/iOS 7 SDK构建时),它可以毫无问题地处理旋转,但现在要求开发人员使用Xcode 6/iOS 8 SDK构建,我的应用程序不再正确处理旋转。

我做了一些研究,并能够使用viewWillTransitionToSize方法来让我的所有子视图正确地旋转和调整大小。然而,当我旋转时,我的屏幕边上有一个白色的大矩形。如果我以纵向启动应用程序并旋转到横向,它会从看起来正常变为右侧有一个大的空白。(如果我从横向开始并旋转到纵向,也会发生同样的情况,但白色空间在底部)。

我的子视图确实调整了它们的大小,但遗憾的是,白色空间掩盖了它们。我检查了UIScreen窗口的边界和边框,这些值似乎有效(横向为1024w x 768h,纵向为768w x 1024h)。以前它是一个空白,但一旦我将行[self.window setFrame:[[UIScreen mainScreen] bounds]];添加到didFinishLaunchingWithOptions方法中,它就变成了一个空白。以下是我正在使用的viewWillTransitionToSize代码:

- (void) viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator
{
    [super viewWillTransitionToSize:size WithTransitionCoordinator:coordinator];
    UIInterfaceOrientation *orientation = [self interfaceFromTransform:[coordinator targetTransform]];
    UIInterfaceOrientation *oldOrientation = [[UIApplication sharedApplication] statusBarOrientation];
    [self willRotateToInterfaceOrientation:orientation duration:1.0];
    [coordinator animateAlongsideTransition:^(id<UIViewControllerTransitionCoordinatorContext> content)
    {
        [self willAnimateRotationToInterfaceOrientation:orientation duration:1.0];
    }
    completion:^(id<UIViewControllerTransitionCoordinatorContext> context)
    {
        [self didRotateFromInterfaceOrientation:oldOrientation];
    }];
    CGFloat height = self.view.frame.size.height;
    CGFloat width = self.view.frame.size.width;
    [self.view setFrame:CGRectMake(0, 0, height, width)];
}

interfaceFromTransform是我创建的一种方法,用于确定转换旋转到哪个接口:

- (UIInterfaceOrientation) interfaceFromTransform: (CGAffineTransform)transform
{
    UIInterfaceOrientation old = [[UIApplication sharedApplication] statusBarOrientation];
    int rotation = 0;
    if (transform.b == -1 && transform.c == 1)
        rotation = 90;
    if (transform.b == 1 && transform.c == -1)
        rotation = -90;
    if (transform.a == -1 && transform.d == -1)
        rotation = 180;
    if (old == UIInterfaceOrientationLandscapeRight)
    {
        if (rotation == 90)
            return UIInterfaceOrientationPortrait;
        if (rotation == -90)
            return UIInterfaceOrientationPortraitUpsideDown;
        if (rotation == 180)
            return UIInterfaceOrientationLandscapeLeft;
    }
    if (old == UIInterfaceOrientationLandscapeLeft)
    {
        if (rotation == 90)
            return UIInterfaceOrientationPortraitUpsideDown;
        if (rotation == -90)
            return UIInterfaceOrientationPortrait;
        if (rotation == 180)
            return UIInterfaceOrientationLandscapeRight;
    }
    if (old == UIInterfaceOrientationPortraitUpsideDown)
    {
        if (rotation == 90)
            return UIInterfaceOrientationLandscapeRight;
        if (rotation == -90)
            return UIInterfaceOrientationLandscapeLeft;
        if (rotation == 180)
            return UIInterfaceOrientationPortrait;
    }
    if (old == UIInterfaceOrientationPortrait)
    {
        if (rotation == 90)
            return UIInterfaceOrientationLandscapeLeft;
        if (rotation == -90)
            return UIInterfaceOrientationLandscapeRight;
        if (rotation == 180)
            return UIInterfaceOrientationPortraitUpsideDown;
    }
    return old;
}

然而,尽管如此,这片空白仍然拒绝消失。当我旋转屏幕时,有没有什么明显的东西会阻止它出现?

事实证明,我在主窗口nib文件中禁用了"自动调整子视图大小"。启用此功能立即解决了问题。

最新更新