簡體   English   中英

故事板+大小類:如何為不同的設備/大小類實現不同的Segues,ViewControllers,UserFlow?

[英]Storyboards + Size Classes: How to implement different Segues, ViewControllers, UserFlow for different devices / size classes?

現有的iOS 7+應用程序支持iPhone和iPad。 目前我使用兩種不同的故事板進行iPhone和iPad布局,效果很好。 現在我嘗試使用自適應大小類將其轉換為One-Storyboard-Layout。

我的問題是,我的iPhone和iPad布局完全不同。 它們不僅為控件使用不同的大小和位置,還使用一些完全不同的視圖控制器。

兩個故事板都使用MMDrawerController作為初始VC。 但是從那里開始,控制流程就不同了。 雖然iPad Storyboard使用UISplitViewController作為所有其他ViewControllers的基礎,但iPhone使用的是UITabBarViewController

這只是一個區別,但還有其他一些。 如何在一個故事板中處理這些差異? 為了達到這個目的,我將根據當前的Size Class來定義不同的segue。 但據我所知,這是不可能的。

一些新的iOS 8自適應Segues的行為可能會有所不同,具體取決於Size Class,但據我所知,不可能為不同的Size Classes指定不同的segue。 此外,根據Size Class,無法定義不同的初始ViewControllers。

所以問題是:是否可以在一個故事板中指定兩種不同的布局(包括不同的Segues,ViewControllers等)?

切換到單個Storyboard的原因是支持iOS 9中的新分屏和幻燈片功能。在啟動時加載不同的故事板取決於屏幕大小/大小類很容易。 但是,當動態更改大小類時,無法在運行時切換到另一個Storyboard。 是嗎?

我剛剛經歷了類似的痛苦,並發現處理更大差異的唯一真正方法是在故事板中正常創建單獨的控制器和segue,但是在代碼中執行它們而不是依賴於在storyboard中創建的segue激活。

在我的情況下,我在iPhone和iPad上使用側邊菜單,但在iPad上使用分割視圖控制器作為主顯示器而不是iPhone上的UINavigationController。 另外一個復雜的問題是,在iOS8上,UISplitViewController在iPhone上受支持,但在iOS7上則不受支持,因為它被視為UINavigationController。

據我所知,你不能使用size類自動觸發正確類型的segue。 但是,只要您有一個進行選擇的機制,您就可以在代碼中執行此操作。 因此,您仍然可以為每個大小的類創建segue,或者更好地為給定的設備類型創建顯示模式,並從代碼中調用正確的。

你最大的問題將是iOS9分屏,它似乎動態地將尺寸等級從iPad regularW / regularH改為iPad compactW / regularH,然后再滑動。 您可以選擇拆分視圖,只需切換到導航控制器堆棧即可。 我可以看到沒有辦法切換到標簽欄,除非你彈回根,讓app委托切換根屏幕並導航回到同一個地方。 在這種情況下,很大程度上取決於您想要看到的內容。

最后,我在故事板中的一般經驗法則是:

0)在App委托中,計算設備類型並將根屏幕設置為正確的故事板控制器入口點:例如,在ipad上拆分視圖,在iPhone上選項卡視圖。 將任何方法/屬性添加到app委托以便任何控制器訪問以找出當前運行模式是很方便的。 當你需要決定開火時,這將使生活更輕松。

1)根據需要創建單獨的控制器,並始終使用任意/任何大小的類設計視圖來創建大部分設計。 我開始使用不同的設計視圖,但發現管理起來太棘手了。 特別是因為一些控制器可能出現在彈出窗口中,其中iPad上的尺寸等級(緊湊寬度)與主屏幕上的尺寸等級(常規寬度)不同。

2)根據需要對各個約束,字體等使用大小等級調整。

3)對於任何可能出現在彈出窗口中的視圖控制器,在它前面加上一個UINavigationController,其故事板ID可以用作任何彈出框的根。

4)對於UISplitViewControllers,使用showDetail樣式segues正常創建。

5)對於在分割視圖控制器中用作詳細視圖的UIViewControllers,但是當在彈出窗口或iOS7上的iPhone上使用時也可能需要將其推入,從其各自的主細節控制器創建推送segue。 如果您通過彈出窗口在拆分視圖中設置的每個現有內容,或者在iPhone上沒有拆分視圖的iOS7上,您只需要這個。

6)在控制器之間創建segue,包括iPad / iPhone特定的segues。 如果只有一個可能的segue,您可以使用storyboard激活。 否則只需在控制器本身之間繪制segue。

7)對於按鈕或單元格觸發segues的任何控制器,您可以添加目標操作而不是segue觸發器。 在這些操作中,您將手動調用相應的segue。

8)在每個視圖控制器中,目標控制器類型取決於顯示模式的類型,編寫代碼,使用您的app委托運行模式屬性來決定使用哪個segue,然后使用segue的標識符調用peformSegueWithIdentifier

不是這個特別漂亮,但它似乎是一個必要的邪惡,特別是如果你使用拆分視圖控制器和彈出窗口。 好處是你至少可以在一個地方看到一切。

暫無
暫無

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

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