0

我正在 Xcode 6 中构建一个横向应用程序。当我在 iOS 8.3 模拟器上运行它时,[UIScreen mainScreen].bounds667x375,但是当我在 iPhone 6 iOS 8 上运行它时,[UIScreen mainScreen].bounds375x667。这给我的应用程序带来了问题,因为许多元素的大小都与屏幕边界一致。我知道[UIScreen mainScreen].bounds在 iOS 8 中发生了变化,但这不是问题。它应该667x375在设备和模拟器上。我会提供代码,但我不知道问题出在哪里。

4

3 回答 3

1
iOS 8.3 iPhone6 Simulator
    Portlait
                           bounds:{{0, 0}, {375, 667}}
                 applicationFrame:{{0, 20}, {375, 647}}
                     nativeBounds:{{0, 0}, {750, 1334}}

    Landscape
                           bounds:{{0, 0}, {667, 375}}
                 applicationFrame:{{0, 0}, {667, 375}}
                     nativeBounds:{{0, 0}, {750, 1334}}

iOS 8.3 iPhone6 Device
    Portlait
                           bounds:{{0, 0}, {375, 667}}
                 applicationFrame:{{0, 20}, {375, 647}}
                     nativeBounds:{{0, 0}, {750, 1334}}
    Landscape
                           bounds:{{0, 0}, {667, 375}}
                 applicationFrame:{{0, 0}, {667, 375}}
                     nativeBounds:{{0, 0}, {750, 1334}}

在 iOS 8.3 上,模拟器和设备的结果完全相同。如果报告的情况仅发生在 iOS 8 设备上,那么将您的应用程序定位到 iOS 8.3 怎么样?

于 2015-04-22T02:47:49.830 回答
0

在 iOS8 上,窗口的框架会随着设备的方向而改变。我认为 667x375 是您的设备横向时的尺寸。

于 2015-04-22T02:32:09.883 回答
0

这是我用来将屏幕大小更改回 iOS 8 之前的快速类方法(切换高度和宽度)

+ (CGSize)getScreenSize {

    CGSize screenSizeRef = [[UIScreen mainScreen] bounds].size;

    if (screenSizeRef.width > 450 && UI_USER_INTERFACE_IDIOM() != UIUserInterfaceIdiomPad) {
        // iPhone 6+ width on portrait is 414
        return CGSizeMake(screenSizeRef.height, screenSizeRef.width);

    }

    if (screenSizeRef.width > 900 && UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {

        return CGSizeMake(screenSizeRef.height, screenSizeRef.width);

    }
    return screenSizeRef;
}

因此,不要调用[[UIScreen mainScreen] bounds],而是将此方法放在一个新类中(这样您就可以从程序中的任何位置访问它)并将您的屏幕尺寸参考设置为getScreenSize

于 2015-04-22T03:26:37.827 回答