用途:这是一份 SwiftUI 自适应布局 API 参考,面向需要构建随屏幕尺寸、方向、动态字体与安全区变化的界面的开发者。它偏重 API 事实与代码示例,决策建议与反模式另见 axiom-swiftui-layout 技能。
主要能力:覆盖 ViewThatFits(按顺序选择首个能放下的子视图,可限定 .horizontal/.vertical,但无法得知选中变体、不能动画、会测量全部变体);AnyLayout(类型擦除的布局容器,可在 HStackLayout、VStackLayout、ZStackLayout、GridLayout 间切换并配合动画,保留视图标识);Layout 协议(自定义布局,实现 sizeThatFits 与 placeSubviews,支持 makeCache 缓存与 LayoutValueKey 自定义布局值);onGeometryChange(布局后读取几何信息,无布局副作用,可回移植到 iOS 16+,支持命名坐标空间);GeometryReader(布局阶段读取 size、safeAreaInsets 与 frame,因贪婪填充需显式约束,避免布局循环);.safeAreaPadding() 与 .padding() 的区别及选择依据;尺寸类与 Dynamic Type 的读取与覆盖;iOS 26 窗口 API(windowResizeAnchor、iPad 菜单栏 CommandMenu)。
使用方式:以 SwiftUI 代码片段展示各 API 的声明式写法,例如 ViewThatFits 内依次放置宽版、窄版与回退布局;用 AnyLayout 配合 .animation(.default, value:) 实现布局切换动画;自定义 Layout 时实现 sizeThatFits 与 placeSubviews;用 .onGeometryChange(for:action:) 读取尺寸或坐标;用 .safeAreaPadding(.horizontal, 20) 处理贴边内容。
适用场景:需要适配 iPhone/iPad 分屏、横竖屏、动态字体、刘海与灵动岛、Home Indicator 的界面;需要自定义流式布局或动画布局切换的场景。
限制:部分 API 有系统版本要求(ViewThatFits、AnyLayout、Layout 协议为 iOS 16+,safeAreaPadding 为 iOS 17+,iOS 26 窗口 API 更新);旧版本需回退到 GeometryReader 手动计算安全区;GeometryReader 使用不当会造成额外布局或循环。文档未提供收费、价格与平台支持范围等信息。