三步让你的 App 在 iPhone Duo 上大放异彩
使用 iOS 27 SDK 及更高版本构建的 App 可在 iPhone Duo 上进行动态尺寸调整。展开设备时,你的 App 会扩展以填满内屏;折叠设备时,你的 App 会回到外屏。硬编码的屏幕尺寸、固定的设备方向以及对特定设备的预设可能会破坏布局,导致内容出现拉伸、裁剪或位置错乱的问题。请按照以下步骤操作,确保你的 App 适配 iPhone Duo。
开始之前
虽然所有 App 都可以在 iPhone Duo 上运行,但使用最新 SDK 构建,可以让你的 App 更好地利用显示屏空间,并在不同布局下实现流畅适配。以下示例展示了,根据构建时所用 SDK 的不同,App 在 iPhone Duo 上的呈现效果也会有所不同。
iOS 26 SDK
使用 iOS 26 SDK 或更早版本构建的 App 可以在 iPhone Duo 上运行,但并非能够适配所有布局。当设备展开时,App 将显示在显示屏中央,窗口周围留有空白区域。当设备折叠时,外屏将在状态栏和相机左侧显示 App 的内容。
iOS 27 SDK
使用 iOS 27 SDK 构建的 App 将调整尺寸,以填满 iPhone Duo 内屏的大部分区域,但仍会避开右侧边缘的状态栏。这通过最大限度地减少空白区域,提升了使用体验。
iOS 27.1 SDK 或更高版本
使用 iOS 27.1 SDK 或更高版本构建的 App 针对 iPhone Duo 进行了优化。App 将延伸以利用整个显示屏,工具栏和标签栏垂直显示在状态栏下方。这样,当用户在两个显示屏之间切换时,可以获得最佳且一致的体验。
在发布使用 iOS 27.1 SDK 构建的 App 之前,请确保 App 的内容能够适配工具栏和标签栏变为垂直显示的情况。
第 1 步:运行 App 尺寸调整技能
在 Xcode 中,向代码助理发出指令:“让我的 App 适配 iPhone Duo”。这项技能会扫描你的项目,查找第 2 步中所述的代码书写问题。对于发现的每个问题,它都会说明问题所在并给出修复建议。
如果你使用的是其他编码智能体,请在“终端”中运行以下命令以导出这项技能:
xcrun agent skills export
这项技能可发现大部分问题,但并非全部。请参考以下列表,查看它标记的问题并排查它遗漏的内容。
第 2 步:修复代码书写问题
停止根据主屏幕调整尺寸
在 iPhone Duo 上,每当设备折叠或展开时,App 尺寸都会发生变化,App 尺寸并不总是与屏幕尺寸一致。在项目中搜索 UIScreen.main,然后分别替换每一处:
- 根据视图或窗口确定尺寸。将
UIScreen.main.bounds替换为view.bounds或window.bounds。在 SwiftUI 中,使用GeometryReader或onGeometryChange。 - 在尺寸发生变化时重新读取。仅在启动时或在
viewIsAppearing中读取一次尺寸是不够的,因为如果折叠,可能会在会话过程中调整 App 尺寸。在layoutSubviews或viewDidLayoutSubviews中实现尺寸相关的布局,并使用viewWillTransition(to:with:)来处理尺寸发生变化时需要运行的操作。 - 从特征集合中获取缩放比例。在 UIKit 中使用
traitCollection.displayScale,或在 SwiftUI 中@Environment(\.displayScale)。 - 基于场景创建窗口。将
UIWindow(frame: UIScreen.main.bounds)替换为UIWindow(windowScene:)。 - 不要储存
UIScreen。当需要屏幕信息时,可以通过view.window?.windowScene?.screen进行动态访问。
避免根据设备方向来决定布局
在 iPhone Duo 上,设备方向无法反映 App 界面的实际形状。请搜索以下属性,并移除依赖于这些属性的所有布局逻辑:
UIDevice.current.orientationstatusBarOrientationinterfaceOrientation,包括windowScene.effectiveGeometry.interfaceOrientation。
要判断你的 App 宽度是否大于高度,请比较可用空间的宽度和高度:在视图控制器中为 view.bounds,在视图中为 superview.bounds,或在 SwiftUI 中通过 GeometryReader 获取的尺寸。
不要依靠设备类型或尺寸类别来判定设备机型
随着 iPhone Duo 和可调整大小的 iPhone 镜像的推出,iPhone App 的尺寸类别可以为任意组合。在内屏上,App 布局应该是 iPad 布局的自然延伸。如需了解更多信息,请参阅“让你的 App 为 iPhone Duo 做好准备”。
- 不要根据设备类型来选择布局。搜索
userInterfaceIdiom == .phone和== .pad。应该基于尺寸类别或可用空间来选择布局。 - 不要将“常规宽度”等同于“iPad”。如果代码逻辑是当
horizontalSizeClass == .regular时显示 iPad 专属布局,或假设 iPhone 始终为紧凑模式,那么现在这段代码在 iPhone 上同样会呈现这种布局。 - 移除对特定设备尺寸的检查。诸如
bounds.height == 844之类的比较,或已知 iPhone 尺寸列表,都无法适配 iPhone Duo。 - 检查全屏媒体。在较宽的显示屏上,设置为
.scaleAspectFill或.aspectRatio(contentMode: .fill)的主视觉图像和视频可能会丢失重要内容。根据当前尺寸类别或宽高比在填充和适配模式之间进行选择,或设置焦点。
第 3 步:测试尺寸调整
使用以下工具测试尺寸调整,以确保 App 按预期正常运行。
- Device Hub 中的 iOS 可调整大小模拟器。
- macOS 27 中的 iPhone 镜像。将窗口在两个方向上调整为极限尺寸。
- Xcode 27.1 中的 iPhone Duo 模拟器。
- 注:iPhone Duo 模拟器是测试完整原生体验的最佳方式。
进阶:在 App Store 中脱颖而出
更新你的 App Store 产品页面,展示 App 适配 iPhone Duo。
展示对 iPhone Duo 的支持。分享 App 预览和截屏来重点展示 App 在采用不同设备方向时的显示效果。在 App Store Connect 中提交 iPhone Duo 截屏后,你的 App Store 产品页面将显示一个徽章,告知用户你的 App 已针对 iPhone Duo 进行了优化。查看截屏规范。
预览你的素材。使用 App Store Connect 中新增的预览工具,查看你的素材 (包括新创意素材) 在 iPhone Duo 上的显示效果。
与我们分享你的 App。在 App Store Connect 中提交精选提名申请,让 App Store 编辑团队知道你的 App 支持 iPhone Duo。在“实用详细信息”部分,你可以注明你的 App 已针对 iPhone Duo 进行了优化,包括支持设备的各种不同摆法。了解如何创建精选提名申请。