![](/img/trans.png)
[英]Rotating view controllers within a hierarchy of View Controller -> Tab Bar Controller -> Navigation Controller -> View Controller
[英]Rotating view controllers within a hierarchy of Tab Bar Controller -> Navigation Controller -> View Controller
我的應用程序有一個視圖控制器層次結構設置如下:
UITabBarController
|
UINavigationController
| |
| UIViewController
|
UINavigationController
|
UIViewController
此層次結構中的所有視圖控制器都會覆蓋該方法:
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation
並返回YES
- 因此視圖控制器應能旋轉到任何旋轉 - 甚至顛倒。
但是,在此設置中,沒有一個視圖控制器成功旋轉。 我的印象是,如果視圖控制器響應旋轉,導航和標簽欄控制器將旋轉。
為什么我的視圖控制器不會旋轉?
我能夠讓它們旋轉的唯一方法是通過UINavigationController
並覆蓋它的shouldAutorotate
方法,但這對我來說感覺不必要,我想知道是否有一些我錯過了這項工作。
根據用戶體驗編碼方法:
如果您還使用工具欄,則每個工具欄項的視圖控制器必須實現shouldAutorotateToInterfaceOrientation:方法,並為您希望支持的每個方向返回YES。 如果您有一個工具欄項的導航控制器,該導航控制器的根視圖控制器必須實現shouldAutorotateToInterfaceOrientation:方法並返回YES。
它說'工具欄' - 但我認為這是一個錯字,可能應該是'標簽欄'。
所以我似乎正確地實現了這一點,但我的控制器仍然沒有自動旋轉。
我遇到了這個問題,但我不記得它發生的確切原因。 標簽欄控制器要求其所有視圖控制器在詢問其旋轉到該方向的特定方向時響應YES。
如果以模態方式呈現,似乎與底層VC系統無關。
我已經創建了一個測試來顯示這個( GitHub上的RotationTest ),但這一切似乎都在起作用。 希望我能記住為什么我在某個時候失敗了。
UITabBarController以及UINavigationController的子類。 它的工作原理是使用xCode 4.4。
我開發了一個擴展,允許你在沒有子類化UITabBarController的情況下做到這一點https://github.com/piercifani/TabBarBetterRotation
您是否嘗試過將Tabbarcontroller子類化並將其設置為tabbarcontroller? 在那里,設置
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation
至
YES
我能夠讓它們旋轉的唯一方法是通過繼承UINavigationController並覆蓋它的shouldAutorotate方法,但這對我來說感覺不必要,我想知道是否有一些我錯過了這項工作。
我不確定這是否是錯誤的方法,但我會比UINavigationController更早地繼承UITabBarController。 此外,您可以嘗試將所有內容包裝在實現旋轉方法的子類UIViewController中,但這會產生額外視圖的開銷。 我曾經嘗試用UINavigationController進行旋轉,但它並不漂亮。 我懷疑,如果您繼承UINavigationController,視圖僅旋轉的原因是視圖層次結構將僅在父項旋轉時傳遞旋轉。 如果父母不旋轉,孩子不會。 (想象一下iPhone中的iPhone。如果底座旋轉,iPhone只能旋轉。現在,將底座與iPhone外殼進行比較。外殼也可以旋轉,因此iPhone也會旋轉。)
它說'工具欄' - 但我認為這是一個錯字,可能應該是'標簽欄'。
我不認為HIG在這方面有錯字。 這些條款可以互換。
通常,“工具欄”與包含它的視圖相關,因此應與其父視圖一起旋轉。 但是,標簽欄是“父”,可以說是屏幕上的視圖控制器。 因此,視圖控制器只應在整個應用程序旋轉時旋轉。 這個概念基本歸結為:哪個視圖(條形圖或視圖控制器)依賴於另一個視圖? (標簽欄是持久的,但視圖會更改,或者只有視圖可見時才是工具欄。)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.