2013-06-05 29 views
1

我一直在致力於更新一些應用程序以支持iPhone 5.他們已經有了一些佈局問題,可以通過UIWindow始終具有iPhone 5的框架來解釋,無論它運行在哪個設備上。例如,對於通用應用程序,即使在iPad上,UIWindow的框架也會設置爲(0,0,320,568)。我想知道是什麼導致了這一點,如果這真的是我應該關心的。什麼決定了window.frame?

+0

你如何確定窗口的大小? – Eric

+0

您是否檢查過目標設備?併爲目標設備添加了閃屏圖像? – Divyu

+0

我爲每個適用設備提供了啓動畫面和圖標,並且我已經對目標設備進行了雙重檢查,看起來應該如此。我還在通用應用程序的模擬器上運行了一個測試,其中我在-applicationDidFinishLaunching的最開始處放置了一個斷點:並將「po窗口」輸入到iPhone 4,iPhone 5和iPad Retina的調試器中,並輸出三個輸出是一樣的,說「frame =(0 0; 320 568);」 –

回答

1

我從來沒有這個檢查自己的通用應用程序,但是,應確保:

  1. 窗口已經視圖層次結構的一部分。新創建的窗口不會幫助您確定大小(如果您在-applicationDidFinishLaunching的最開始部分記錄了「frame」)。

  2. frame只是一個訪問器,它合併了boundscenter屬性。如果將變換應用於視圖(窗口),它無法正常工作。但是,使用窗口時,通常會應用變換。

iOS的繪製代碼窗口看起來類似於以下內容:

CGContextSaveGState(context); 
CGContextTranslateCTM(context, [window center].x, [window center].y); 
CGContextConcatCTM(context, [window transform]); 
CGContextTranslateCTM(context, 
    -[window bounds].size.width * [[window layer] anchorPoint].x, 
    -[window bounds].size.height * [[window layer] anchorPoint].y); 

[[window layer] renderInContext:context]; 
CGContextRestoreGState(context); 

(見Technical Note QA1703

你可以看到,最終frame大小從boundstransform確定。如果您進行了一些實驗,則可以看到,例如,即使設備方向發生更改,鍵盤窗口也不會更改邊界。縱向和橫向之間的尺寸變化由transform決定。

一般而言,window.rootViewController.bounds是要走的路。

+0

部分hte視圖hierearchy做喲umean調用-makeKeyandVisible?我嘗試過之後再進行檢查,結果是一樣的。看起來有一個MainWindow.xib是我的問題的根源,因爲它保持在一個大小。更改模擬指標也會更改其大小。我讀過這是一個古老的做法,有這些xib文件,所以我會嘗試以編程方式製作窗口。感謝有關圖紙的技術信息。 –

+0

@RickardWesterlund我對一件事感興趣 - 你能否確認窗口大小始終保持不變?例如,當在視圖控制器上調用viewDidLayout時,窗口的大小是否仍然相同?無論如何,幾乎沒有任何情況,窗口大小應該讓你感興趣。 – Sulthan

+0

是的,窗口大小似乎保持不變。窗口大小似乎對觸摸輸入而言很重要,窗外的任何東西都不會接收到任何輸入。此外,旋轉時,我可以看到窗口,因爲它框架兩側的四個黑框將勾勒出它。看來根視圖控制器的視圖不是由窗口大小設置的,但這是一個不同的問題。現在,當我編程UIWindow時,代碼就會起作用,但它不是很漂亮。 –

相關問題