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

iOS13后MPVolumeView的showsRouteButton被弃用,隐藏按钮无合规方案是否属API问题?

关于MPVolumeView showsRouteButton弃用后的隐藏方案及API设计疑问解答

我完全懂你的困惑——当初iOS 13刚推出的时候,我在处理音量控件也遇到过这个糟心的问题:明明只是想隐藏那个路由按钮,不需要任何路由功能,Apple却直接把showsRouteButton给弃用了,还只给了用AVRoutePickerView的建议,完全没照顾到我们这种“只想隐藏按钮”的小众需求。

先给你两个可行的非弃用方案,解决隐藏按钮的问题:

  • 遍历子视图手动隐藏路由按钮
    虽然这是个偏“hack”性质的方法,但实际项目中用起来很稳定,Apple很少会改动MPVolumeView内部子视图的基础结构。你可以通过遍历子视图,找到路由按钮并隐藏它:
    let volumeView = MPVolumeView()
    // 遍历子视图定位路由按钮
    for subview in volumeView.subviews {
        if let button = subview as? UIButton {
            // 通过accessibilityLabel识别,避免依赖私有API类名
            if button.accessibilityLabel == "Route" {
                button.isHidden = true
                break
            }
        }
    }
    
  • 裁剪MPVolumeView的frame隐藏按钮
    MPVolumeView的默认布局是音量滑块在左侧,路由按钮在右侧。你可以直接调整控件的宽度,让它刚好只容纳滑块部分,把按钮裁切掉。不过这个方法依赖系统默认布局,不同iOS版本可能有细微变化,不如遍历子视图可靠。

关于这算不算Apple的API设计失误?

从开发者的角度来说,这确实属于设计考虑不周。Apple的初衷是把路由选择功能统一迁移到AVRoutePickerView,所以废弃了旧的属性,但他们忽略了很多开发者只是需要一个纯粹的音量滑块,不需要任何路由相关的控件。按道理来说,要么弃用后默认隐藏按钮,要么提供一个新的属性让我们手动控制隐藏,而不是直接把这个选项给删掉。很多开发者都在开发者社区吐槽过这个点,所以你的疑问完全合理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 17:37:37