2014-10-09 18 views
0

您好我現在面臨一個奇怪的問題。我將一個UIViewController添加到Window的RootViewController。 我已將我的ViewControllerXIB的自動調整設置爲MaskAll。當我在橫向模式下使用iOS 7在iPad上運行我的項目時,屏幕尺寸爲(1024,768)。但是當我在iOS 8上運行iPad時,屏幕尺寸爲(768,1024)。我無法弄清楚爲什麼會發生這種情況。由於這個我ViewController的子視圖不加載適當的屏幕大小,因爲我傳遞他們的ViewController的屏幕大小。 有人能幫我解決這個問題嗎?讓不同幀RootViewControllers爲iOS 7和iOS 8

+0

見http://stackoverflow.com/questions/24150359/is-uiscreen-mainscreen-bounds-size-becoming-orientation-dependent-in-ios8這是相同的基本問題。 – rmaddy 2014-10-09 03:51:09

+0

從iOS的所有早期版本中,iOS 8中的Landscape的屏幕尺寸報告發生了變化。我忘記了哪個WWDC視頻被提及,所以我不能指出你的文檔。 – 2014-10-09 03:51:43

回答

4

但是,當我在iOS 8上運行iPad時,屏幕尺寸爲(768,1024)。

這是因爲在iOS 7和之前版本中,應用旋轉涉及將旋轉變換應用到根視圖控制器的視圖,而窗口和屏幕仍保留固定在設備上。但在iOS 8中,整個應用程序從字面上旋轉。這是一個主要更改,如果您期待旋轉變換,它確實會破壞您的現有代碼。另一方面它也好多了 - 在iOS 8中,旋轉意味着屏幕,窗口,根視圖控制器的視圖都只是改變大小(它們交換它們的高度和寬度) - 這意味着如果你的應用程序啓動到風景它從一開始就具有正確的尺寸。

如果您需要在iOS 8的純設備座標,你可以用新的UICoordinateSpace協議(https://developer.apple.com/library/ios/documentation/UIKit/Reference/UICoordinateSpace_protocol/)得到它們。

+0

我應該補充說,基本上你以前做的事情一直是錯的。你不應該看屏幕大小,而是用約束來定位你的視圖。這樣,你的界面就可以適應超級視圖可能採用的任何尺寸。 (請觀看WWDC 2014視頻,讓您的應用適應性更多地瞭解這一新理念......) – matt 2014-10-09 04:32:14