簡體   English   中英

優化最新的iPad Pro Simulator

[英]Optimization for newest iPad Pro Simulator

我安裝了最新的Xcode 7.1 beta並嘗試在iPad Pro Simulator上運行我的項目。 一切都是正確的,所有功能都正常。

但我的屏幕尺寸有問題......

在應用程序的主屏幕上,我運行下一個日志:

NSLog(@"%f", self.view.bounds.size.width);

我有1024個橫向方向。 但是當我在Xcode 7.1中創建一個新的應用程序並在主屏幕上運行相同的代碼時,我得到另一個值:1366。

今天我計划使用Araxis Merge在舊Xcode(6.4)和最新beta 7.1中創建的項目文件之間找到差異。

你現在如何為我的舊項目解決這個問題?

我可能會離開這里,但我遇到了與iPad Pro模擬器類似的問題:它一直給我標准的1024 * 768點分辨率。 經過一番挖掘后,我意識到我正在使用標准iPad發布圖像(因為資產目錄中沒有iPad Pro版本),這限制了我的屏幕保持1024 * 768點。 一旦我介紹了發布故事板,一切都已落實到位,我的應用程序以正確的1366 * 1024點大小啟動。

TL; DR viewDidLayoutSubviews:在調用viewWillLayoutSubviews:viewDidLayoutSubviews:之前,看來視圖層次結構未針對iPad Pro屏幕大小進行調整。 當布局系統調用它時,取決於視圖層次結構的構造。


在為iPad Pro更新我的應用程序時,我也看到了類似的行為。 因此,我深入研究了視圖控制器生命周期事件,以查看現有項目和新項目中發生的情況。

對於一個全新的項目,使用僅具有導航欄(位於狀態欄下方)的視圖控制器和主視圖(占用剩余空間,打開自動布局,在橫向模式下)以下截圖:

具有導航欄和自動布局的示例視圖控制器

我在視圖控制器生命周期的控制台中看到以下輸出:

-[ViewController viewDidLoad] self.navigationBar: .frame: {{0, 20}, {1024, 44}}; .bounds: {{0, 0}, {1024, 44}}
-[ViewController viewDidLoad] self.primaryView: .frame: {{0, 64}, {1024, 704}}; .bounds: {{0, 0}, {1024, 704}}

-[ViewController viewWillAppear:] self.navigationBar: .frame: {{0, 20}, {1024, 44}}; .bounds: {{0, 0}, {1024, 44}}
-[ViewController viewWillAppear:] self.primaryView: .frame: {{0, 64}, {1024, 704}}; .bounds: {{0, 0}, {1024, 704}}

-[ViewController viewWillLayoutSubviews] self.navigationBar: .frame: {{0, 20}, {1024, 44}}; .bounds: {{0, 0}, {1024, 44}}
-[ViewController viewWillLayoutSubviews] self.primaryView: .frame: {{0, 64}, {1024, 704}}; .bounds: {{0, 0}, {1024, 704}}

-[ViewController viewDidLayoutSubviews] self.navigationBar: .frame: {{0, 20}, {1366, 44}}; .bounds: {{0, 0}, {1366, 44}}
-[ViewController viewDidLayoutSubviews] self.primaryView: .frame: {{0, 64}, {1366, 960}}; .bounds: {{0, 0}, {1366, 960}}

-[ViewController viewDidAppear:] self.navigationBar: .frame: {{0, 20}, {1366, 44}}; .bounds: {{0, 0}, {1366, 44}}
-[ViewController viewDidAppear:] self.primaryView: .frame: {{0, 64}, {1366, 960}}; .bounds: {{0, 0}, {1366, 960}}

從我在這里看到的,視圖開始的寬度為1024點,但一旦執行'viewDidLayoutSubviews',就確定了合適的大小(1366分)。

在我自己的一個使用分割視圖控制器的屏幕項目中,我可以看到類似的行為:

-[XYZViewController viewDidLoad] self.navigationBar: .frame: {{0, 20}, {1024, 44}}; .bounds: {{0, 0}, {1024, 44}}

-[XYZViewController viewWillLayoutSubviews] self.navigationBar: .frame: {{0, 20}, {1024, 44}}; .bounds: {{0, 0}, {1024, 44}}
-[XYZViewController viewDidLayoutSubviews] self.navigationBar: .frame: {{0, 0}, {1366, 44}}; .bounds: {{0, 0}, {1366, 44}}

-[XYZViewController viewWillLayoutSubviews] self.navigationBar: .frame: {{0, 0}, {1366, 44}}; .bounds: {{0, 0}, {1366, 44}}
-[XYZViewController viewDidLayoutSubviews] self.navigationBar: .frame: {{0, 0}, {1366, 44}}; .bounds: {{0, 0}, {1366, 44}}

-[XYZViewController viewWillAppear:] self.navigationBar: .frame: {{0, 0}, {1366, 44}}; .bounds: {{0, 0}, {1366, 44}}

-[XYZViewController viewWillLayoutSubviews] self.navigationBar: .frame: {{0, 0}, {1366, 44}}; .bounds: {{0, 0}, {1366, 44}}
-[XYZViewController viewDidLayoutSubviews] self.navigationBar: .frame: {{0, 20}, {1366, 44}}; .bounds: {{0, 0}, {1366, 44}}

-[XYZViewController viewWillLayoutSubviews] self.navigationBar: .frame: {{0, 20}, {1366, 44}}; .bounds: {{0, 0}, {1366, 44}}
-[XYZViewController viewDidLayoutSubviews] self.navigationBar: .frame: {{0, 20}, {1366, 44}}; .bounds: {{0, 0}, {1366, 44}}

-[XYZViewController viewDidAppear:] self.navigationBar: .frame: {{0, 20}, {1366, 44}}; .bounds: {{0, 0}, {1366, 44}}

在這種情況下,由於視圖層次結構不同, viewWillLayoutSubviews:在視圖控制器生命周期中較早調用,並且已調用viewWillAppear:時間的正確大小。 但正如您所看到的,這實際上取決於您的視圖層次結構 - 因此我建議您確認視圖層次結構,然后確定添加與分辨率相關的代碼的最佳位置。

如果由於某些原因對任何UI元素的框架進行硬編碼,則可能需要為即將推出的iPad專業版更改它。 因為,它具有不同的屏幕尺寸(以點為單位)。

如果你使用自動布局和動態幀(例如self.view.bounds.size.width),我猜它應該工作正常。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM