关于VisionOS各功能组件使用单位的技术咨询
VisionOS 组件单位区分指南
2D 界面组件(逻辑像素为单位)
这类组件沿用 iOS/macOS 的 2D 界面单位体系,以逻辑像素作为基准:
- WindowGroups:标准 2D 窗口的所有布局属性(如
frame、padding),以及GeometryReader读取的尺寸值,均使用逻辑像素,与 iOS 完全一致。 - GeometryReader:仅作用于 2D 空间,读取的尺寸、位置信息单位为逻辑像素,用于适配 2D 界面布局。
- Volumetric Windows 内的 2D 内容:在 Volumetric 窗口中嵌入的 SwiftUI 2D 视图,其布局单位仍为逻辑像素,不受窗口 3D 空间单位影响。
3D/沉浸式空间组件(米为单位)
这类组件基于真实物理空间尺度,以米作为单位:
- Immersive Spaces:整个沉浸式空间的坐标系以米为基准,所有 3D 元素的位置、尺寸均遵循真实世界尺度。
- GeometryReader3D:读取 3D 空间中的尺寸与位置信息,单位为米,用于适配 3D 场景布局。
- RealityView 中的 RealityKit 实体:RealityView 内的
Entity对象,其position、scale等属性单位均为米,对应真实物理空间的位置。
易混淆场景说明
- Volumetric Windows 双重单位:窗口本身的 3D 占位属性(如大小、空间位置)用米,比如设置窗口大小为
CGSize(width: 0.5, height: 0.3);但窗口内部的 2D SwiftUI 视图布局仍用逻辑像素,比如给 Text 设置.frame(width: 200)。 - RealityView 内的两种 position:
- 若设置的是 RealityKit
Entity的position,单位为米; - 若设置的是嵌入 RealityView 的 SwiftUI 视图的
position,单位为逻辑像素。
示例代码:
RealityView { content in // Entity 的 position 用米 let entity = Entity() entity.position = SIMD3<Float>(0, 1, -2) content.add(entity) // 嵌入的 SwiftUI 视图的 position 用逻辑像素 content.add(Text("Hello").position(x: 100, y: 50)) } - 若设置的是 RealityKit
内容的提问来源于stack exchange,提问作者Code on the Rocks
相关产品推荐
相关产品推荐

