2014-02-10 40 views
36

因此,我創建了一個包含最新版本XCode的新項目,並嘗試記錄我的應用程序的屏幕大小(以確定UI的設備類型)。UIScreen主屏幕邊界返回錯誤的大小

NSLog(@"%f", [[UIScreen mainScreen] bounds].size.height); 

這回480,這是舊的iPhone系列屏幕尺寸:我從我的iPhone 5運行下面的代碼。我在模擬器中嘗試過,發生了同樣的事情。是否有一些屬性需要在項目中啓用才能識別屏幕大小?

這隻發生在5個以上的設備上;如果我在iPad上運行遊戲,它會識別1024屏幕大小。

我知道這個代碼在過去有效。我使用完全相同的方法制作了一款遊戲,並且它在檢測屏幕尺寸方面沒有問題,但是這是在XCode 4.x中構建的。

附加信息:

我使用一個自定義視圖控制器,這是我在App代表創建具有以下代碼:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
    { 

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

    if([Global getDevice] == 1) 
    { 
     //iPhone 5+ 
     self.window.rootViewController = [[FivePlus alloc] initWithNibName:nil bundle:nil]; 

    } 
    else if([Global getDevice] == 2) 
    { 
     //iPhone 4S- 
     self.window.rootViewController = [[FourSMinus alloc] initWithNibName:nil bundle:nil]; 
    } 
    else 
    { 
     //iPad 
     self.window.rootViewController = [[iPad alloc] initWithNibName:nil bundle:nil]; 
    } 

    [[self window] makeKeyAndVisible]; 

    // Override point for customization after application launch. 
    return YES; 
} 

從Global.h該方法的getDevice:

+ (int)getDevice 
{ 
if([[UIScreen mainScreen] bounds].size.height == 568 || [[UIScreen mainScreen] bounds].size.width == 568) 
    { 
     return 1; 
    } 
    else if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) 
    { 
     return 3; 
    } 
    else 
    { 
     return 2; 
    } 
} 

回答

96

顯然,iOS依靠完全由對iPhone 5+的分辨率的啓動圖像的存在,以便讓t他的應用以該決議運行。

有兩個解決這個問題:

1.使用資產目錄

當你創建一個新的項目,有這個東西叫做存儲的啓動圖像文件的資產目錄。將其中的一個添加到您的項目中,然後馬上!

2.找出一些舊文件

如果您見過世面的XCode了一段時間,你就會知道,在XCode中4.x版的後續版本中的一個,該應用程序會自動創建了三個您的應用的默認啓動圖像文件名爲Default.png[email protected][email protected]。您需要在您的應用中使用這些文件,這些文件基本上只是分辨率爲480x320,960x6401136x640的黑色圖像(請注意,這些文件的格式爲HxW,而不是WxH)。

  1. 這些文件添加到您的「支持文件」組
  2. 轉到項目屬性,選擇「不要使用資產目錄」,從啓動圖像部分
  3. 刪除資產目錄。

希望這有助於別人誰遇到這種荒謬的問題。

+12

+1 +1 +1 +1 +1 +1 +1 +1你不知道這是多麼有幫助。多麼奇怪的問題。哦,我的上帝.................... – Katushai

+0

見http://stackoverflow.com/questions/24150359/is-uiscreen-mainscreen-bounds-size-becoming-orientation -dependent-in-ios8 – Bobjt

+0

第二個視角適合我! –

1

在XCode6沒有啓動屏幕圖像的情況下iPhone5的屏幕尺寸會觸發警告。如果按下警告,XCode將添加一個默認值(只是普通的黑色)。

這將啓用'正常'模擬器大小。

1

在iOS 8 [[UIScreen mainScreen] bounds].size.height);返回某些東西倒過來設備處於垂直或橫向模式。

+1

請注意,我檢查'.height == 568 || .WIDTH == 568' – David

1

iOS會經常「假裝」你擁有的屏幕尺寸。例如,蘋果公司假設,如果您的某個解決方案沒有正確的啓動圖像,那麼您還沒有設計出應用程序在該分辨率下正常工作,因此它會以不同的大小運行您的應用程序。在極端情況下,在iPad上運行的僅iPhone應用程序將返回320 x 480.

就您的應用程序而言,報告的屏幕大小是您的應用程序可用的屏幕大小。如果它報告320 x 480,那麼這是您的應用程序可以使用的。任何畫在480像素以下的東西都將不可見。

您說服iOS以您想要的分辨率運行您的應用程序,例如通過提供正確大小的啓動圖像。在iPhone 6和6+的情況下,用戶可以在「縮放」模式下運行它們,這樣它們的表現就好像它們具有iPhone 5或6的屏幕(只是物理上更大)。

相關問題