[UIScreen mainScreen] .bounds提供的值不正确

时间:2015-04-22 02:29:45

标签: objective-c uiscreen

我正在Xcode 6中构建一个横向应用程序。当我在iOS 8.3模拟器上运行时,[UIScreen mainScreen].bounds667x375,但是当我在iPhone 6 iOS 8上运行它时,{{ 1}}是[UIScreen mainScreen].bounds。这导致我的应用程序出现问题,因为许多元素的大小都与屏幕边界一致。我知道在iOS 8中更改了375x667,但这不是问题。它应该是设备和模拟器上的[UIScreen mainScreen].bounds。 我提供代码,但我不知道问题出在哪里。

3 个答案:

答案 0 :(得分: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?

答案 1 :(得分:0)

在iOS8上,窗口的框架将随设备方向而变化。我认为667x375是您的设备风景时的尺寸。

答案 2 :(得分: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的返回值