Crawling the subviews and using constraints I've manage to replicate the behaviour of AVRoutePickerView, which resizes icon image according to its containing view.
Although it's needed to use a custom icon via setRouteButtonImage(second image). If not, it uses 2 ImageView that don't show the ion resized (first image).
Code and View Hierarchy attached next:
class ViewController: UIViewController {
@IBOutlet weak var airplayView: MPVolumeView!
override func viewDidLoad() {
super.viewDidLoad()
airplayView.showsRouteButton = true
airplayView.showsVolumeSlider = false
airplayView.setRouteButtonImage(UIImage(named: "airplay"), for: .normal)
for view in airplayView.subviews {
if let button = view as? UIButton {
button.imageView?.contentMode = .scaleAspectFit
button.translatesAutoresizingMaskIntoConstraints = false
NSLayoutConstraint(item: button,
attribute: NSLayoutConstraint.Attribute.bottom,
relatedBy: NSLayoutConstraint.Relation.equal,
toItem: airplayView,
attribute: NSLayoutConstraint.Attribute.bottom,
multiplier: 1,
constant: 0).isActive = true
NSLayoutConstraint(item: button,
attribute: NSLayoutConstraint.Attribute.trailing,
relatedBy: NSLayoutConstraint.Relation.equal,
toItem: airplayView,
attribute: NSLayoutConstraint.Attribute.trailing,
multiplier: 1,
constant: 0).isActive = true
NSLayoutConstraint(item: button,
attribute: NSLayoutConstraint.Attribute.top,
relatedBy: NSLayoutConstraint.Relation.equal,
toItem: airplayView,
attribute: NSLayoutConstraint.Attribute.top,
multiplier: 1,
constant: 0).isActive = true
NSLayoutConstraint(item: button,
attribute: NSLayoutConstraint.Attribute.leading,
relatedBy: NSLayoutConstraint.Relation.equal,
toItem: airplayView,
attribute: NSLayoutConstraint.Attribute.leading,
multiplier: 1,
constant: 0).isActive = true
}
}
}
}
