蘋果已在 2026 年 9 月 9 日釋出第一款摺疊 iPhone,名字是 iPhone Duo。預購從 10 月 16 日太平洋時間凌晨 5 點開始,北京時間當天 20:00。首批包括中國在內的 70 多個國家和地區,10 月 23 日開售;另有 28 個地區是 10 月 30 日。出廠系統是 iOS 27.1。美國起步價 1999 美元(256GB)。規格以 蘋果新聞稿為準。
今天要回答的不是「要不要買」,而是已經在 App Store 裡的 iOS App:會不會因為摺疊屏被淘汰,哪些介面必須改。 開發者文件寫得很直:所有 App 都能在 Duo 上執行。用 iOS 27 及之後的 SDK 構建的,會隨摺疊改變尺寸。合上回到外屏,開啟鋪進內屏。被拉長、裁切或放錯位置的,是寫死螢幕尺寸、固定方向、按機型假設佈局的那些介面。
兩塊屏比例相同,內容可以按比例縮放,所以很多列表和表單不用重畫。內屏 7.6 英寸,比 iPhone 18 Pro Max 大 50%;外屏 5.4 英寸,面積大約是 iPhone 18 Pro 的 90%,合上接近護照大小。同一套單欄放大之後,資訊流會空,分欄才用得上這塊屏。
我們 9 月 9 日的手記按當天流傳的 Ultra 寫了硬體。產品名以新聞稿的 iPhone Duo 為準。這篇只談現有 App 的介面。
現有 iOS App 不會被淘汰。業務不用重寫。要重做的是把「螢幕永遠是那一個尺寸」寫進佈局的介面:寫死寬高、按 phone/pad 分支、自定義欄,以及相機、影片和該在內屏分欄的工作區。
能跑,不等於不用改
蘋果在 Prepare for iPhone Duo 裡把底線寫在第一段:所有 App 都會執行。用 iOS 27 SDK 及以後構建的,開啟時展開到內屏,合上時回到外屏。硬編碼的螢幕尺寸、固定方向和裝置假設會把佈局拉壞。
所以「淘汰」說重了。帳號、API、內購、推送都不因為一塊鉸鏈重寫。使用者 10 月 23 日開啟舊包,行程還在。他看見的可能是內屏正中一塊舊手機視窗,四周是空的。對起步 1999 美元的 7.6 英寸來說,這不是完成。
人機指南也把範圍收窄了:支援各種姿勢,不是為每種摺疊角各畫一版。外屏用 compact 寬,內屏用 regular 寬,就覆蓋了基本姿勢。尺寸變化時不要重做 App,讓現有佈局按可用空間展開。見 Preparing your app for iPhone Duo。
三檔 SDK,決定內屏怎麼用
同一套二進位制,使用者看見的空檔取決於你用哪一版 SDK 編出來。蘋果給的對照是這樣:
| 構建 SDK | 開啟(內屏) | 合上(外屏) |
|---|---|---|
| iOS 26 及更早 | 視窗居中,四周留白 | 內容在狀態列和攝像頭左側 |
| iOS 27 | 鋪滿大部分內屏,仍避開右側狀態列 | 隨尺寸回到外屏,空檔比舊 SDK 小 |
| iOS 27.1 及以後 | 用滿整塊屏;工具欄和標籤欄改到狀態列下方豎排 | 同一套豎排欄,隨摺疊切換螢幕 |
Duo 出廠就是 27.1。只為了「能裝上」停在舊 SDK,內屏就是留白。升到 27.1 SDK 之前,先確認內容能跟著欄變成豎排,否則全屏內容會和系統欄重疊。
哪些應用必須改介面
不是按品類一刀切。先在工程裡搜下面這些假設。搜得到,這一屏就要改佈局;搜不到,多半隨系統容器走。
寫死螢幕尺寸
搜尋 UIScreen.main。摺疊會在一次會話中途改掉 App 的尺寸,而且這個尺寸經常不等於整塊螢幕。
UIScreen.main.bounds改成view.bounds或window.bounds。SwiftUI 用GeometryReader或onGeometryChange。- 只在啟動或
viewIsAppearing讀一次不夠。依賴尺寸的佈局放進layoutSubviews/viewDidLayoutSubviews,尺寸變化用viewWillTransition(to:with:)。 - 縮放用
traitCollection.displayScale或@Environment(\.displayScale)。 UIWindow(frame: UIScreen.main.bounds)改成UIWindow(windowScene:)。不要把一個UIScreen存下來。bounds.height == 844這種已知機型高度表對不上 Duo。
用方向或機型分支
在 Duo 上,裝置方向不能告訴你 App 是寬是高。佈局裡去掉對這些屬性的依賴:UIDevice.current.orientation、statusBarOrientation、interfaceOrientation(包括 windowScene.effectiveGeometry.interfaceOrientation)。要判斷寬大於高,比較手頭空間的寬和高。
有了 Duo,再加上可調整大小的 iPhone 鏡像,一個 iPhone App 可以是任意 size class 組合。內屏應當是 iPad 佈局的自然延伸,而不是另一套產品。
- 不要用
userInterfaceIdiom == .phone或== .pad選佈局。按 size class 或可用空間選。 - 不要把 regular 寬當成「這是 iPad」。這段程式碼現在會在 iPhone 內屏上執行。外屏豎持仍是 compact 寬、regular 高,和普通 iPhone 一樣。
- iPad 分支裡如果還有隻給大屏的死尺寸,內屏會把那套死尺寸原樣跑出來。
自定義欄要變豎排
系統的標籤欄、導航和鎖屏控制,在 27.1 上改到側面、狀態列下面,把豎向空間留給內容。開啟後主螢幕是兩頁,左側是可滾動的 Today View。狀態列收成角落裡的圓形。Dynamic Island 也改成豎在外屏和內屏的側面。
自己畫的頂欄、底欄、懸浮按鈕如果還按「底部一條橫欄」定位,會和豎排系統欄搶邊,或壓住內屏右側的狀態列。自定義欄和全出血畫布用 iOS 27.1 的 ReservedRegion(SwiftUI)或 UIViewReservedRegion(UIKit),把摺痕和攝像頭遮擋留出來。系統分欄會自己躲開摺痕;自己用 HStack / ZStack 拼的不會。
半折時,系統的 arrangement 會把主檢視放到摺痕的一側、次檢視放到另一側。全開或合上、沒有分割型保留區時,overlay 仍是疊在一起。自定義疊層要自己處理這一下。
影片、相機、閱讀、通話
半折時內屏像兩半。媒體、相機、閱讀、視訊通話應把內容放一半、控制放另一半,不要騎在摺痕上。
蘋果自己的相機已經按雙屏做了:外屏看後置攝像頭的自拍預覽(Duo Preview),外屏播放兒童提示動畫,Duo FaceTime 讓旁邊的人用外屏加入。第三方相機、濾鏡、直播如果只有一塊預覽畫布,開啟後主體會被摺痕切開。
全出血圖片和影片用 .scaleAspectFill 或 .aspectRatio(contentMode: .fill) 時,更寬的內屏會裁掉主體。按當前 size class 或寬高比在 fill 和 fit 之間選,或設一個焦點。新聞稿裡 Netflix 把外屏用來刷短片、開啟後用大屏;Zoom 把內屏分成共享內容和與會者。這是改介面的樣子:同一套內容換容器,不是換一套業務。
內屏分欄,外屏單欄
iOS 27 第一次在 iPhone 上做系統 Split View:兩個 App 並排,或同一 App 兩個視窗,例如兩個 Safari。也可以一邊看內容,一邊和 Siri AI 說話,並把一對 App 存下來下次再開。
郵件、文件、Slack 這類工作區,內屏如果還是一條被拉寬的時間線,密度是浪費。SwiftUI 用 NavigationSplitView,UIKit 用 UISplitViewController:內屏側欄或雙欄,外屏收成一欄,和普通 iPhone 上 regular / compact 的切換同一條路徑。網格用偶數欄,摺痕兩邊才切得開。欄寬要在摺疊時仍然看得清。
新聞稿點名 Slack 已經把整個工作區鋪進內屏。沒有 iPad 分欄的協作工具,這是 10 月 23 日前最值得排的一屏,但它仍是佈局,不是重寫訊息同步。
哪些可以先不重做
| 介面 | 不改,10 月 23 日會怎樣 | 要不要重做 |
|---|---|---|
| 設定、表單、系統列表 | 能用。舊 SDK 內屏留白;新 SDK 單列被拉寬 | 不用重做。升到 27.1 SDK,確認豎排欄不擋字 |
| 已經適配 iPad 的自適應佈局 | 內屏會走到 regular 寬那條路徑 | 小改。去掉「regular 寬 = 只有 iPad」 |
寫死 390/844、UIScreen.main |
拉伸、裁切、控制元件錯位 | 必須改佈局,不必重寫業務 |
| 相機、視訊通話、閱讀、全屏影片 | 主體可能騎在摺痕上,fill 會裁掉人臉 | 要改這一屏:半折分邊、焦點、安全區 |
| 郵件、文件、協作工作區 | 能用,內屏是一條被拉寬的時間線 | 建議做分欄。外屏仍是單欄 |
| 遊戲、地圖、設計畫布 | 比例一變就露邊,或裁掉主體和 HUD | 要改畫布和安全區,不是換玩法 |
只在外屏當普通手機用、內屏留白也能接受的內部工具,可以跑。上架主路徑、截圖和推薦位則另說:App Store Connect 可以預覽 iPhone Duo 素材,featuring 提名裡可以寫明支援全部姿勢。那是商店頁,不是另一套程式碼。
不要為合上、開啟、半折各維護三套完全不同的介面。指南的要求是一套佈局隨空間展開。
釋出前怎麼驗
在 Xcode 裡對編碼助手說 get my app ready for iPhone Duo。它會掃上面這些模式,並給出改法。用別的 agent 時,終端跑 xcrun agent skills export 把技能匯出來。技能掃不全,寫死高度和自定義欄還是要人看。
三處測試,文件把 Duo 模擬器標成完整體驗:
- Xcode 27.1 裡的 iPhone Duo 模擬器
- Device Hub 裡可調整大小的 iOS 模擬器
- macOS 27 上的 iPhone 鏡像,把視窗拉到兩個方向的極端尺寸
至少過這六種:合上、開啟、半折,各加豎持和橫持。再加一次系統 Split View。自定義相機和影片再單獨看半折時摺痕有沒有切開主體。
- Xcode 27.1 和 Duo 模擬器裝到單獨的 Mac,白天的會議和出包不要擠在同一臺筆記本上。
- 先跑技能掃描,再手工看自定義欄、全出血影片和半折。
- 沒有 regular 寬佈局的,不要在 10 月 16 日預購當天才開始做分欄。
- 商店截圖和程式碼分開排。截圖補不上,不代表舊包會從 Duo 上消失。
一臺 Mac、Developer 計劃和 CI 的月賬單,我們在 9 月 14 日的成本文裡拆過。Duo 不會把那張表歸零,它只是讓 27.1 SDK 和模擬器有一臺乾淨的機器可裝。
常見問題
現有 iOS App 不更新,10 月 23 日還能開啟嗎?
能。蘋果寫明所有 App 都會執行。用 iOS 26 或更早 SDK 構建的,開啟時居中留白,合上時內容偏到狀態列和攝像頭左側。能開啟不等於介面已經適配。
是不是要為摺疊屏把 App 重寫一遍?
不用重寫業務、賬號和介面。要改的是佈局假設:UIScreen.main、固定方向、phone/pad 分支、寫死寬高,以及自定義工具欄。已經用系統容器並支援 iPad 尺寸變化的,工作量最小。
哪些型別最該排期改介面?
相機、視訊通話、閱讀和全屏影片要處理摺痕和半折。郵件、文件和協作工具要在內屏做分欄、外屏收回單欄。遊戲、地圖和設計畫布要檢查拉伸與安全區。標準列表和設定可以隨 SDK 升級先上。
只適配 iPhone、沒有 iPad 版,會不會不能用?
不會不能用。外屏豎持仍是 compact 寬。內屏是 regular 寬。程式碼若把 regular 寬當成只有 iPad 才顯示的功能,這些功能會在 Duo 內屏出現;若根本沒有 regular 佈局,新 SDK 會把單欄拉寬,舊 SDK 則留白。
iPhone Duo 出廠是哪一版系統?
新聞稿寫明配備 iOS 27.1。鋪滿內屏、工具欄和標籤欄改到狀態列下方豎排,對應的是 iOS 27.1 SDK 及以後。iOS 27 SDK 仍會避開右側狀態列。
預購和開售是哪天?
10 月 16 日太平洋時間凌晨 5 點開始預購,北京時間當天 20:00。10 月 23 日起在包括中國在內的 70 多個國家和地區開售,另有 28 個地區 10 月 30 日。美國起步價 1999 美元,256GB。
結語
摺疊屏沒有淘汰現有 iOS App。它淘汰的是「螢幕永遠是那一個尺寸」這句假設。10 月 23 日前值得改的,是寫死尺寸、按機型分支、自定義欄,以及相機、影片和內屏分欄。列表和設定跟著 27.1 SDK 走就夠。驗的時候用 Xcode 27.1 的 Duo 模擬器,別和日用機搶同一臺 Mac。