2009-09-03 30 views
3

我有兩個應用程序,這兩個應用程序都強制用戶在橫向模式下使用iPhone,以獲得更寬的屏幕,而不是更高的屏幕。強制橫向應用的應用程序難度

我發現的一件事是我的第一個視圖看起來很好,但所有其他視圖都會將它們的子視圖(UIButtons,UIPicker,UIViews)擠壓到一邊或剪裁(取決於是否設置了元素移動,調整視圖大小或保持與視圖大小相同的位置)。我所有的觀點都是以橫向設計的IB設計的。我的底層UIWindow,以及我所能想到的所有內容都是以橫向排列的。即使我的plist文件也設置了UIInterfaceOrientationLandscapeRight標誌。

現在,如果我加載所有視圖的同時作爲我的rootview控制器,那麼我沒有任何問題。但是如果我在稍後加載視圖,它們會被剪切或擠壓。

來解決這個問題的唯一方法是添加在我的代碼下面一行是在翻轉的新觀點:

[coming.view setFrame:CGRectMake(0, 0, 480, 300)]; 

任何人都知道我爲什麼要做這個?是否只是iPhone假定加載的視圖是300x480,除非將轉換應用於它們?

謝謝。

ps。這是個什麼看法似乎是如果我不叫SETFRAME,如上文所述:

alt text http://files.me.com/mahboud/ljhvun

是那些獲得的第一個加載後都會有自己的屏幕同樣擠壓了所有viewcontrollers。出於某種原因,第一個viewcontroller沒有這個問題。

+0

我可以確認這仍然是iPhone OS 3.1.3的問題。由於我的ADC會員資格中包含兩項免費支持事件,所以我已經提交了一份,並在有任何消息時通知您。 –

回答

0

一個正確的答案將取決於知道你如何強迫風景取向。如果你通過UIViewController和公司這樣做,它應該相對簡單;對於其他方法可能更復雜。

在簡單情況下,你應該能夠覆蓋shouldAutorotateToInterfaceOrientation:您的視圖控制器,設置您在Interface Builder意見,並在你的Info.plist的UIInterfaceOrientation鍵設置爲UIInterfaceOrientationLandscapeRight和設置。

+0

UIInterfaceOrientationLandscapeRight在info.plist中設置,所以應用程序將從這個方向開始。 NIB中的所有內容都以相同的方向設置。不過,第二個和下一個視圖需要按照上面的設置來設置其視圖大小,以便他們正確顯示其內容。 – mahboudz

1

我想你想在你的應用程序的每個單一視圖中使用橫向模式。你也想讓筆尖成爲風景模式。您可以調整視圖的大小(狀態欄爲0,0,480,300,非狀態欄爲320)。並設計你想要的。最後,在視圖控制器中爲autorotate返回no。最後轉換視圖並旋轉。

+0

我改變了我所有的 \t回報((interfaceOrientation == UIInterfaceOrientationLandscapeLeft)|| \t \t \t \t(interfaceOrientation == UIInterfaceOrientationLandscapeRight)); 將返回NO代替所有情況。該應用程序以縱向模式顯示所有視圖。 – mahboudz

+2

您不應該爲'shouldAutorotate'返回NO。返回NO意味着你不希望處於任何方向,這是不可能的。 UIKit會在控制檯中記錄警告,你應該檢查它。相反,您想要的方向返回YES。 –

1

我有一個類似的問題,詢問SO的問題,然後找出答案並自己回答。你可能想看看它。

+0

粘土的解決方案對我很好。 –

0

一個簡單的方法,我解決了這個問題是有我的根視圖控制器子類的UINavigationController,並實現shouldAutorotateToInterfaceOrientation處理橫向視圖即

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { 
    return ((interfaceOrientation == UIInterfaceOrientationLandscapeLeft) || 
      (interfaceOrientation == UIInterfaceOrientationLandscapeRight)); 
} 

每個視圖控制器推送到導航控制器,似乎出現在景觀也。

相關問題