用途:为 iPhone Duo 半折叠状态设计自适应布局,让内容避开内屏中部的弯曲区域,保持可读与可点。
主要能力:
- 保留区域(Reserved Regions)。分两类:division 区域把空间切成多个可用区(折痕即此类,内容不能穿过);occlusion 区域覆盖部分空间但不切分(如内屏 FaceTime 摄像头)。iPhone Duo 有三个:外屏前摄(常驻 occlusion)、内屏前摄(仅激活时 occlusion)、折叠区域(仅半折叠时 division)。区域有 isActive 状态,查询时可用 .includeInactive 获取未激活区域,便于做稳定决策。
- 查询方式。SwiftUI 在 GeometryProxy 上调用 reservedRegions(kind:options:layoutDirectionBehavior:),UIKit 在 UIView 上调用 reservedRegions(kind:options:)。每个区域提供 frame、isActive、kind、margins;frame 已含 margins,不要重复内缩,用 frame 内缩 margins 可得纯硬件区域。
- 位移模式(Displacement)。按可用空间调整元素 frame,使重要内容保持可见可达。可作用于单个控件或整个容器;不要移动连续滚动内容;按姿态决定去向:书本式折叠把临时提示放尾侧,桌面支撑时上方放远读内容、下方放可点控件。
- 系统容器自动适配:NavigationStack、NavigationSplitView、TabView、List、ScrollView,以及 action sheet、alert、menu、popover 等。
- Arrangement(iOS 27.1 新增):按规则排布两个视图,输入为水平/垂直 size class、宽高比、是否有 division 区域激活,输出是否显示及 frame。SwiftUI 用 ArrangementView,UIKit 用 UIArrangementViewController。分栏样式(split)默认按宽高比横向或纵向切分,可用 .axes(.horizontal) 限定;叠加样式(overlay)在无 division 区域时上下堆叠,半折叠时改为并排,主视图移到尾侧或底部。选择依据:HStack/VStack 对应 split,ZStack 对应 overlay;前景覆盖背景用 overlay,主从且不可遮挡用 split。
限制:Arrangement 不提供导航基础设施,不要在其中放 NavigationSplitView;不要嵌套进 List 或 ScrollView;需要列展开折叠应使用真正的 split view。铰链角度不适合布局,仅适合驱动效果。
使用顺序:先审查居中布局,优先用系统容器,再把自定义横向分栏或叠加替换为 ArrangementView,最后对高优先级手动定位控件采用保留区域 API 手动实现位移。
资料未提供具体收费、价格与平台支持范围。