SuperAPI AI 工具集

iphone-duo-adaptive-layout

通用与其它

查看项目

更新于 10-15 21:39

技能介绍

用途:为 iPhone Duo 部分折叠时的内屏布局提供适配方案。折叠处是硬件约束,iOS 将其建模为可查询的保留区域(reserved region),内容不应穿过弯曲中心。

主要能力:区分两类保留区域——division(分割,如折叠区,内容只能在一侧)与 occlusion(遮挡,如内屏 FaceTime 摄像头)。iPhone Duo 有三个:外屏前摄(常驻遮挡)、内屏前摄(仅激活时遮挡)、折叠区(仅部分折叠时激活,平展时宽度为零)。区域可查询 frame、isActive、kind、margins;frame 已含 margins,勿重复内缩,用 margins 内缩 frame 可得纯硬件区。

使用方式:SwiftUI 中通过 GeometryReader 或 onGeometryChange 取得 GeometryProxy,调用 reservedRegions(kind:options:);UIKit 中同一方法挂在 UIView 上,签名 func reservedRegions(kind: UIView.ReservedRegion.Kind, options: UIView.ReservedRegion.QueryOptions = []) -> [UIView.ReservedRegion]。传 .includeInactive 可获取存在但未激活的区域。SwiftUI 查询还有 layoutDirectionBehavior 参数(默认 .mirrors)。位移模式用于让重要元素在折叠时移入合适区域,但不要移动可滚动内容,也不要移动过远。

Arrangement(iOS 27.1 新增):按规则排列两个视图的布局容器。SwiftUI 用 ArrangementView,UIKit 用 UIArrangementViewController。split 样式默认按宽高比横向或纵向分割,可用 .axes(.horizontal) 约束;overlay 样式堆叠并在折叠时转为并排。选择依据:HStack/VStack 对应 split,ZStack 对应 overlay;前景覆盖背景用 overlay,主从且不可遮挡用 split。

限制:Arrangement 不提供导航基础设施,不要嵌套在 NavigationSplitView、List 或 ScrollView 中;需要列展开折叠应使用真正的 split view。系统容器(NavigationStack、List、ScrollView、action sheet、alert、menu、popover)已自动适配,应优先使用。铰链角度不适合布局,仅适合驱动效果。