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