iPhone Duo控制欄設計教學重點

🕒 20:372026/9/29 10:305,628 字37 張照片

本節聚焦iPhone Duo的控制欄設計:因應更寬的螢幕比例,介面應將適合的頂部與底部互動元素移至側邊,以保留內容的垂直空間;同時透過標準容器、軸向規則與溢出優先級,維持跨姿態的一致操作體驗。

會議重點

iPhone Duo控制欄垂直工具欄TabViewNavigationStackAxis Behavior APIOverflow menuVisibility Priority API

iPhone Duo帶來全新的產品輪廓。較大的寬高比提供更多水平空間,而為了有效運用寬度並騰出內容所需的垂直空間,原本位於頂部或底部的互動元素通常會移至螢幕側邊。外屏與內屏橫向時,控制欄的位置保持一致;內屏竪屏因垂直空間充足,則恢復熟悉的頂部與底部水平控制欄。這些是同一組元件對不同螢幕環境的適配,而非不同功能。

0:44iPhone Duo以側邊控制欄釋放內容垂直空間,呈現不同螢幕姿態下的控制欄適配概念。
「這些都是相同的組件,它們只是在適應不同的螢幕環境和佈局。」

設計與實作可依序處理四項工作:將既有水平欄適配為縱向佈局、建立控制欄元素的排列與容器適配規則、調整自訂內容以支援縱向空間,並管理overflow menu。

基礎適配與標準容器

3:20UIKit的工具欄項目應由ViewController配置並交由UINavigationController管理,以取得iPhone Duo的自動適配。
3:27以自訂UIToolbar、UINavigationBar或UITabBar構建的工具欄,無法自動移轉至側邊,需避免此做法。

控制欄排列與容器邏輯

iPhone Duo允許導航欄、工具欄與Tab欄在同一區域共存,可將其理解為旋轉90度後形成的垂直堆疊;具體組合取決於介面需求。系統備忘錄APP的堆疊可僅含工具欄,時鐘APP可顯示Tab欄,健身APP則可同時包含工具欄與Tab欄。

3:59導航欄、工具欄與Tab欄可在同一側邊區域形成垂直堆疊,組合依APP介面而定。
4:07控制欄可視為原有水平區域旋轉90度後的垂直堆疊,說明側邊佈局的基本結構。
4:19系統備忘錄APP的範例顯示,側邊堆疊可僅配置工具欄元素。
4:30時鐘APP與健身APP示例說明,側邊區域可依需求放置Tab欄,或結合Tab欄與工具欄。

並非所有工具欄都應轉為縱向。複雜佈局中,只有工具欄容器本身位於螢幕邊緣時,該容器的工具欄元素才會垂直排列。例如分割視圖僅右側詳情欄的工具欄改為垂直,側邊欄仍維持水平;右側詳情欄已有垂直工具欄時,展開的檢查器面板仍以水平排列其按鈕。

4:58分割視圖中,僅位於螢幕邊緣的右側詳情欄工具欄轉為垂直;其他欄位維持水平排列。
5:12詳情欄已具垂直工具欄時,檢查器面板不再新增垂直欄,而是保留自身的水平按鈕排列。

外屏上的模態面板工具欄預設垂直顯示,內屏則維持置中水平排列。可透過Preferred Placement API改變面板位置:面板位於左側時工具欄按鈕不變,位於右側時會自動切換為垂直形態。垂直控制欄與硬體對齊,即使在從右到左語言環境中也固定在同一側,內容區則另行調整。

5:36Preferred Placement API可改變面板位置;右側面板的工具欄會自動採用垂直形態。
6:01垂直控制欄與硬體側邊對齊;從右到左語言環境會調整內容佈局,但控制欄位置保持固定。
「並不是所有的空間都應該移到縱軸,具體的形態會取決於它所在的容器在整個界面佈局當中的邏輯。」

垂直欄須維持清楚的由上而下層級:頂端保留返回或關閉,其後放置當前畫面最關鍵的操作,如完成或保存。原生導航框架會自動將返回按鈕放在正確位置;自訂返回或關閉按鈕在SwiftUI應使用CancellationAction,在UIKit應使用LeadingItem,並將LeftItemsSupplementBackButton設為False。

6:39垂直控制欄應依序安排返回或關閉,以及完成、保存等當前畫面的關鍵操作。
6:54自訂返回或關閉按鈕需使用正確Placement或LeadingItem設定,避免與系統返回行為衝突。

需要凸顯的關鍵操作,SwiftUI應設為TopUpPinnedTrailing,UIKit應使用PinnedTrailingGroup。其餘元素維持原有分組;即使合併為單一工具欄,原本頂部與底部群組仍會以分隔間距保有視覺區隔。不同姿態不一定都採垂直工具欄,因此必須維持空間關係一致,避免使用者重新學習操作位置。

7:18關鍵操作可透過TopUpPinnedTrailing或PinnedTrailingGroup凸顯,其他控制項維持原始分組與間距。
7:49控制欄在不同螢幕姿態間應維持一致的空間關係,降低使用者重新辨識操作位置的成本。

內容軸向與自訂視圖調整

水平工具欄具有固定高度與彈性寬度;垂直工具欄則固定寬度、高度可彈性延展,因此更適合圖標形式的互動元素。每個工具欄元素原則上都應同時提供圖標與標題,由系統依情境決定呈現方式:可見於既有頂部或底部欄位時通常優先顯示圖標,未指定圖標則顯示文字;移入溢出菜單時則同時顯示標題與圖標。

8:30垂直工具欄固定寬度、可彈性延展高度,因此以圖標形式的互動元素最為合適。
9:08工具欄元素應同時提供圖標與標題;系統會依可見位置或溢出菜單情境選擇呈現方式。

提供圖標的按鈕,如返回或分享,會移往縱軸;僅含文字的按鈕則留在水平軸。若已使用SwiftUI的Label或UIBarButtonItem屬性設定標題與圖標,即已具備縱向工具欄適配基礎。即使目前只顯示圖形,也應提供標題,讓元素在溢出菜單或展開狀態中能正確顯示文字。

9:24具圖標的返回、分享等按鈕可進入縱軸;純文字按鈕則保留在水平軸,維持內容可讀性。
10:00透過SwiftUI的Label或UIBarButtonItem同時設定標題與圖標,讓系統能依軸向與情境調整呈現。

SwiftUI與UIKit預設依元素內容判斷合適軸向,必要時可使用Axis Behavior API調整。關聯性高的元素應維持在同一軸線,例如可在文字編輯與圖標完成狀態間切換的按鈕,即使變成圖標也不應移至垂直區域;自訂此類按鈕時,應將Axis Behavior設為Horizontal Only。

11:04Axis Behavior API可覆寫系統的軸向判斷;會在文字與圖標狀態間切換的編輯按鈕應維持Horizontal Only。

UIKit自訂視圖與SwiftUI複雜視圖預設維持水平佈局;若自訂視圖確實適合垂直呈現,例如指南針,才設定Axis Behavior為Vertical Preferred。應盡量減少純文字或文字加圖標的自訂按鈕,讓更多元素可垂直配置;多數情況可用圖標傳達操作,計數資訊則可改以徽標呈現。

11:43適合側邊呈現的自訂視圖,例如指南針,可設定Vertical Preferred以允許進入縱軸。
12:10對於可由圖標表達的操作,應減少文字佔用;計數資訊可改用徽標以維持垂直欄的自然排列。
12:41iOS 26新增的Badge API可提供符合系統標準的徽標外觀,避免將計數直接併入圖標文字。

自訂視圖是否保留文字,應判斷文字是僅強化圖標資訊,或是傳達精確資訊所必需。前者通常只保留圖標即可;後者如購物車總額,可採橫向大按鈕。附屬視圖應始終與鍵盤綁定,不應移至縱軸。

12:54文字僅為補充時可省略;如需傳達購物車總額等精確資訊,則以橫向大按鈕保留可讀性。
13:14附屬視圖應與鍵盤維持綁定,不應因控制欄適配而移至縱軸。

欲讓自訂底欄等視圖移至縱軸,須確保內容符合固定欄寬,或具備垂直自適應佈局。可針對垂直呈現調整參數,例如隱藏標題並略微縮短高度;在SwiftUI可讀取Vertical Edge環境變數,在UIKit可讀取trait。只有元素能配置至垂直欄時才可取得這些值,否則會回傳nil或未指定。

13:32自訂底欄轉為垂直呈現時,可隱藏標題並縮短高度,使內容適應側邊固定寬度。
14:11自訂視圖可透過Vertical Edge環境變數或UIKit trait偵測垂直欄情境,據以調整呈現。
14:40僅在元素可配置到垂直欄時,才會取得Vertical Edge或對應trait的有效值。

垂直欄預設不提供滾動邊緣效果;若系統開啟降低透明度,預設垂直欄會加入背景以維持視覺分隔,自訂視圖亦應同步調整樣式。縱軸上的彈性分隔間距高度預設為0,固定分隔間距則保有最小尺寸;無論水平或垂直欄,元素間都不需額外加入間距。

15:00降低透明度啟用時,垂直欄會提供背景以確保分隔度;自訂視圖需配合調整視覺樣式。
15:18垂直欄的彈性分隔間距高度為0,固定間距維持最小尺寸,元素之間不需另加額外間距。

Overflow menu與壓縮策略

縱向空間較有限,控制欄容易因鍵盤、畫中畫等競爭元素而溢出。設計時應先判斷工具欄與Tab欄何者需較長時間保持可見:以內容導航瀏覽為核心的體驗,如播客APP,預設優先壓縮工具欄,讓作為一級導航的Tab欄持續可見;以任務為導向的體驗,如遊戲APP,則可優先壓縮Tab欄以保留高頻工具欄按鈕。

16:14內容導航型體驗中,工具欄優先壓縮,Tab欄作為一級導航維持可見。
16:35任務導向體驗可優先壓縮Tab欄,以保留使用者頻繁操作的工具欄按鈕。

應使用Toolbar Vertical Compression Behavior API設定壓縮規則。若APP已有溢出菜單,SwiftUI應使用Toolbar Overflow Menu,UIKit則使用Additional Overflow Items,將操作整合至系統管理菜單。省略號圖標是iOS的標準溢出菜單圖標,不應用於其他語意,也不應以其他平台圖標替代。

透過Visibility Priority API可設定工具欄元素的可見性優先級。預設由下而上折疊,也可對按鈕群組或單一按鈕指定高、低或自訂優先級。編寫郵件、創建筆記等高頻建立操作,以及帶有未讀徽標等傳達重要資訊的按鈕,應盡可能延後折疊至溢出菜單。

18:18Visibility Priority API可控制工具欄由下而上的折疊順序,並為群組或單一按鈕指定優先級。
18:21高頻建立操作應設定較高可見性優先級,盡可能最後才折疊進overflow menu。
18:40帶有未讀徽標等重要資訊的按鈕,應保持較長時間可見,避免過早進入overflow menu。

側邊化不是所有介面的預設答案。計算器等以單一畫面為主、下方內容密集的APP,建議保留頂部工具欄的水平佈局,讓下方內容使用完整空間。模態面板若本身操作很多、工具欄僅有關閉按鈕,也可禁用垂直工具欄,避免壓縮面板內容;可透過toolbarVerticalBehavior或preferred vertical bar behavior設定。

19:42計算器等下方內容密集的單一畫面,可保留頂部水平工具欄,避免側邊欄壓縮內容空間。
20:29模態面板若僅有關閉按鈕且內含大量操作,可禁用垂直工具欄以保留面板內容空間。

待辦追蹤

討論摘錄

「咱們應該提前為這些元素提供所有的資訊,然後由系統去決定它們在不同的上下文環境里的呈現方式。」
「要考慮哪些按鈕是使用者最頻繁會用到的。」
「首先,要讓咱們的APP做好準備,第一步是使用最新的SDK來構建。」
由爪爪聽寫圖文報告生成AI 生成