
独立 App 首发完成 iPhone Duo 展开态适配
iPhone Duo 带来了新的屏幕形态,也给效率类 App 提出了一个很直接的问题:当一台 iPhone 展开后,界面是否还能只按传统单列手机来设计?

PandaCounter 在第一时间完成了针对 iPhone Duo 展开态的适配。

目标很明确:让更大的屏幕真正服务于计时、计数和统计,而不是简单把原来的手机界面拉宽。
为什么要快速适配

PandaCounter 的主流程高度依赖列表:用户会频繁浏览计时器、开始或暂停任务、记录计数、按分类切换视图,并查看统计结果。对这类应用来说,展开态设备最宝贵的不是"更大",而是"能同时看见更多有用信息"。

因此,这次适配优先处理最核心的使用路径:
| 场景 | 适配重点 | 用户收益 |
|---|---|---|
| 计时器列表 | Duo 展开态双列卡片 | 同屏浏览更多计时任务 |
| 计数器列表 | 展开态双列卡片 | 降低滚动频率 |
| 详情与统计 | 更充分利用横向空间 | 信息结构更清晰 |
| 普通 iPhone | 保持原单列界面 | 不影响既有体验 |
iPhone Duo:展开后就是新的工作台

在 iPhone Duo 展开态下,PandaCounter 会识别 regular/regular 尺寸组合,并启用更适合宽屏的布局。

计时器列表从传统单列切换为双列卡片,运行中的分组仍然保留高优先级展示,普通计时器则以更紧凑的卡片形式铺开。

这个变化看起来直接,但背后有一个原则:只改变排布,不改变任务流。用户仍然可以按原来的方式开始计时、暂停、停止、置顶,或者把任务加入灵动岛。

不让普通 iPhone 为新设备买单
适配 iPhone Duo 的同时,PandaCounter 没有牺牲普通 iPhone 的稳定性。iPhone 18 Pro 等常规机型继续使用原来的单列列表,不会因为 Duo 适配而改变导航节奏、卡片宽度或列表交互。

这是这次适配里最重要的工程边界:新设备获得新布局,旧设备保持原体验。
速度之外,更要守住交互一致性
为了尽快完成首发适配,我们没有重写整套界面,而是把变化集中在尺寸条件明确的布局分支里。Duo 展开态使用 ScrollView + LazyVGrid 承载双列卡片;普通 iPhone 和编辑模式继续使用原来的 List。

SwiftUI 27 的 swipeActionsContainer() 也被用于补齐自定义滚动容器里的滑动操作,让双列卡片拥有和单列列表一致的交互。

| 交互 | Duo 展开态 | 普通 iPhone |
|---|---|---|
| 右滑操作 | 置顶、子任务、开始、暂停、恢复、停止 | 保持一致 |
| 左滑操作 | 加入或移除灵动岛 | 保持一致 |
| 编辑模式 | 回到系统 List | 保持一致 |
| 布局密度 | 双列 | 单列 |
这让适配速度和可靠性之间取得了平衡:用户能立刻感受到 Duo 展开态的优势,同时不会遇到一套陌生的操作逻辑。

工程策略
这次适配遵循几个简单原则:
- 用 Size Class 判断展开态,而不是硬编码设备型号。
- 只在宽屏条件下启用双列布局。
- 复用已有滑动按钮和业务逻辑。
- 编辑、删除、移动等系统行为继续交给
List。 - 普通 iPhone 的布局路径保持不变。

这种做法让 PandaCounter 可以快速跟进新硬件,同时把回归风险控制在较小范围内。

小结
iPhone Duo 对效率类 App 是一次很好的提醒:新的屏幕形态不只是适配分辨率,更是重新审视信息密度和操作路径的机会。
PandaCounter 已经完成首发级 iPhone Duo 展开态适配。更宽的屏幕用于承载更多任务卡片,更稳定的条件分支用于保护普通 iPhone 体验。
对一个每天被反复打开的工具来说,这比视觉上的"大改版"更重要。
那么,看到这里小伙伴们学会了吗?
感谢观赏,我们下次不见不散!😯