You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

什么是View Hierarchy?如何向其中添加MPVolumeView组件?

MPVolumeView 正确实现方案

核心问题原因

你当前代码里的myView定义在ViewController类外部,没有被添加到当前控制器的视图层级中,因此挂载在它内部的MPVolumeView自然不会显示。
官方文档提到的「嵌入View Hierarchy」,指的是需要将MPVolumeView或它的父容器,添加到当前页面控制器的视图子节点中,可通过Storyboard拖入或者代码调用addSubview实现。

实现方案1:基于Storyboard(匹配官方文档说明)

  • 打开Main.storyboard,在当前ViewController的页面视图上拖入一个普通UIView,自行调整位置和尺寸,作为MPVolumeView的承载容器
  • 给这个承载UIView绑定IBOutlet到ViewController类中,变量命名为mpVolumeViewParentView
  • 在viewDidLoad方法中添加如下代码:
override func viewDidLoad() {
    super.viewDidLoad()
    // 初始化MPVolumeView,尺寸和承载容器保持一致
    let volumeView = MPVolumeView(frame: mpVolumeViewParentView.bounds)
    // 若只需要声道选择功能,可打开下行注释隐藏音量滑块
    // volumeView.showsVolumeSlider = false
    volumeView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
    mpVolumeViewParentView.addSubview(volumeView)
}

实现方案2:纯代码实现(无需修改Storyboard)

直接在viewDidLoad方法中创建并添加到当前控制器视图即可:

override func viewDidLoad() {
    super.viewDidLoad()
    // 创建MPVolumeView的承载容器
    let volumeParentView = UIView(frame: CGRect(x: 20, y: 100, width: view.bounds.width - 40, height: 40))
    volumeParentView.backgroundColor = .clear
    view.addSubview(volumeParentView)
    // 挂载MPVolumeView
    let volumeView = MPVolumeView(frame: volumeParentView.bounds)
    volumeView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
    volumeParentView.addSubview(volumeView)
}

注意:iOS模拟器不会渲染MPVolumeView的路由选择(含声道选择)按钮,必须使用真机调试才能看到完整组件效果。

内容的提问来源于stack exchange,提问作者Greg

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 09:18:02