打破數位與現實的邊界
在 iOS 26 中,Apple 推出的「Liquid Glass 液態玻璃」設計系統,標誌著行動介面從「平面圖層」向「深度材質」的根本轉型。這不僅是一次視覺上的美化,更是一套關於「觸覺沉浸感」的技術架構。Liquid Glass 的核心在於其半透明、動態且具備生物性的質地——它不再是死板的背景,而是一層隨時準備與使用者互動的智慧介質。
作為開發者,我們最關心的往往是效能與實作成本。Apple 在此展現了極高的戰略智慧:透過最新的 SDK 進行重新編譯(Recompile),現有的 UIKit 元件將自動獲得 Liquid Glass 的基本外觀。這是一個強大的「安全網」,讓開發者能在大後方穩健更新的同時,騰出雙手去磨練那些真正定義 App 靈魂的自定義互動體驗。
接下來,我們將跳過表面的修飾,直接進入底層,剖析這場視覺革命的實踐指南。
懸浮導覽的進化:Tab View 與實戰優化
在 iOS 26 中,UITabBarController 徹底擺脫了螢幕底部的束縛。標籤列現在以懸浮姿態存在,成為 App 的導航中樞。
最小化行為與空間彈性
懸浮 Tab Bar 支援最小化行為,這對大螢幕內容的沈浸感至關重要。透過設定 tabBarMinimizeBehavior 為 .onScrollDown,標籤列會在使用者探索內容時自動收縮。
進階實作:UITabAccessory
對於像音樂 App 這樣需要迷你播放器的場景,UITabAccessory 是核心工具。
- 技術細節:當 Tab Bar 最小化時,
bottomAccessory會自動向下平移並與標籤列「Inline」併排 - 資深開發者建議:空間變小時,開發者必須監聽
tabAccessoryEnvironmenttrait。這不僅是視覺調整,更是功能取捨
// 實作 Tab Bar 最小化與 Accessory 監聽
let tabBarController = UITabBarController()
tabBarController.tabBarMinimizeBehavior = .onScrollDown
let accessory = UITabAccessory(contentView: miniPlayerView)
tabBarController.bottomAccessory = accessory
// 根據環境調整 Accessory 內容
self.registerForTraitChanges([UITabAccessoryEnvironment.self]) { (self, previousTrait) in
let isInline = self.traitCollection.tabAccessoryEnvironment == .inline
self.miniPlayerView.updateForCondensedSpace(isInline)
}
背景延伸技術:UIBackgroundExtensionView 的視覺魔術
在 iPadOS 上,側邊欄(Sidebar)與內容區的視覺斷層一直是設計痛點。iOS 26 透過 UIBackgroundExtensionView 實現了「內容無縫填充」,這正是「視覺連續性」的完美體現。
讓內容「呼吸」
以 TV App 為例,海報影像現在會越過邊界,延伸至側邊欄與導覽列下方。這種效果讓 UI 顯得輕盈,彷彿側邊欄真的懸浮在藝術作品之上。
- 開發原則:側邊欄下方應填充「充滿活力 Vibrant」的內容
- 佈局策略:標題或描述文字應作為 ExtensionView 的 Sibling(同級視圖)而非 Subview,以防止文字跟著背景一起被「特殊處理」
// 配置 UIBackgroundExtensionView 實現無縫背景
let extensionView = UIBackgroundExtensionView()
extensionView.contentView = posterImageView
extensionView.automaticallyPlacesContentView = false // 手動精確控制
// 關鍵:將內容 Leading 對齊 extensionView 的安全區域,確保延伸至側邊欄底
posterImageView.leadingAnchor.constraint(equalTo: extensionView.safeAreaLayoutGuide.leadingAnchor).isActive = true
posterImageView.topAnchor.constraint(equalTo: self.view.topAnchor).isActive = true
玻璃化工具列與邊緣效應
Liquid Glass 將透明度提升為系統預設值。這意味著我們必須捨棄舊有的背景自定義(如 UIBarAppearance 或自訂 backgroundColor),否則會完全破壞玻璃質感。
自動分組與 Subtitle API
UINavigationItem 現在更具層次感。系統會自動將圖像按鈕分組,而文字按鈕(如「Done」)則獨立存在。此外,新增的 subtitle API 與 largeSubtitleView 屬性,讓開發者能在 Large Title 下方放置互動式元件(如郵件過濾按鈕)。
強化邊緣 Hard Edge
對於元素密集、充滿懸浮物件的複雜 UI,ScrollEdgeElementContainerInteraction 提供了 .hard 風格。這能為邊緣提供類似 iOS 18 的清晰邊界,確保捲動時的易讀性。
// 為自定義懸浮容器添加「硬邊緣」效應
let interaction = ScrollEdgeElementContainerInteraction(for: .bottom, with: contentScrollView)
interaction.style = .hard // 適用於密集 UI
buttonsContainerView.addInteraction(interaction)
整合式搜尋體驗:Search 的新位置
搜尋功能在 iOS 26 中經歷了顯著的重構。搜尋框不再固定在頂部,而是轉向更易觸及的位置。
- iPhone 端:搜尋框自動移動至底部的工具列(Toolbar)。若已有工具列,請使用
searchBarPlacementBarButtonItem來精確定位 - iPad 端:支援
searchBarPlacementAllowsExternalIntegration,讓搜尋框整合進導覽列的末端,遵循 macOS 的高效模式 - 搜尋標籤:
UITabBarController現在可以包含一個專門的「搜尋標籤」,點擊後會自動擴展成搜尋欄位
流體轉場:全互動式縮放
Liquid Glass 的靈魂在於其物理動力學。iOS 26 引入了「隨時可中斷」的轉場模型,讓使用者能在動畫進行到一半時立即介入。
Zoom Transition 的統一化
無論是選單、彈出視窗還是 Sheet,現在都支援 .zoom 轉換。當從玻璃按鈕發起請求時,按鈕會「形變 Morph」為呈現的視窗。
- 關鍵更新:在 iPhone 上,Action Sheets 現在也像 iPad 一樣懸浮在源元件上方
- 開發必備:必須設定
sourceItem或sourceView,否則系統無法計算 Morph 動畫的起點,會退回到傳統的居中顯示
// 設定 Action Sheet 的玻璃形變轉場
let actionSheet = UIAlertController(title: nil, message: nil, preferredStyle: .actionSheet)
// 必須指定 sourceItem 才能觸發 Liquid Glass 動畫
actionSheet.popoverPresentationController?.sourceItem = self.shareButton
present(actionSheet, animated: true)
微互動的藝術:Slider 與按鈕
微小的控制項決定了 App 的精緻度。
- UIButton:新增
.glass()與.prominentGlass()配置 - UISlider:具備「動量與伸展 Momentum and Stretch」效果。透過
TrackConfiguration支援刻度(Tick Marks)與中性值(Neutral Value)填充。此外,.thumbless樣式則是影音播放進度條的首選,減少視覺干擾
開發者進階:建構自定義 Liquid Glass 元素
當系統元件無法滿足需求時,UIGlassEffect 是你的終極武器。
核心原則:單一懸浮層 Single Floating Layer
設計 Liquid Glass 時應遵循「單一懸浮層」原則:避免玻璃元素相互重疊,以免破壞那種「懸浮在內容之上」的物理錯覺。
API 深度解讀
- Materialize 動畫:顯示或隱藏玻璃時,應設定
effect = nil或賦值,而非調整alpha。這會觸發系統專有的「材質化」動畫 - Concentricity 向心性:使用
.containerRelative設定圓角,元件會根據與容器邊緣的距離自動調整半徑,維持視覺上的和諧 - Merging 動態融合:使用
UIGlassContainerEffect並調整spacing。當兩個玻璃視圖靠近時,它們會像水滴一樣融合在一起
Liquid Glass 融合效果
// 實作自定義玻璃融合容器
let containerEffect = UIGlassContainerEffect()
containerEffect.spacing = 15.0 // 定義融合靈敏度
let glassContainer = UIVisualEffectView(effect: containerEffect)
// 啟用互動回饋:點擊時自動縮放與彈跳
let glassEffect = UIGlassEffect()
glassEffect.isInteractive = true
customView.effect = glassEffect
定義未來的視覺語言
Liquid Glass 不僅是視覺上的「通透」,更是互動上的「通暢」。它透過物理慣性與材質感,減少了使用者在操作數位介面時的認知負擔。
對開發者而言,這是一個檢視設計意圖(Design Intent)的最佳時機。我們不應在 App 中到處堆疊玻璃,而應將這種昂貴的視覺資源保留給最重要的互動層。
最後的思考
在你的 App 中,哪一個核心互動最適合轉化為 Liquid Glass 懸浮層,以重新定義使用者的觸覺感受?現在就開始實作,擁抱這個觸手可及的未來。
關於 XcodeProject
XcodeProject 創立於 2023,致力於協助開發者探索 Apple 的創新世界,學習在 iOS、iPadOS、macOS、tvOS、visionOS 與 watchOS 上開發 App,發現眾多技術與框架,讓開發者獲得更多能力。