iOS13后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
相关产品推荐
相关产品推荐

