[tvOS]UIButtonのBackgroundImageが先頭に表示される問題を解消する


tvOSのUIButtonのBackgroundImageはなぜかimageViewよりも前にあるので、セットすると文字やsetImage,stateした画像が隠れて見えなくなります。

上が修正済みのボタン、下が既存のUIButton

レイヤー構造

UIImageViewが二枚あって分かりにくいですが、backgroundImageのImageViewが先頭に来てしまっています。


class FixedButton : UIButton {
    override func layoutSubviews() {
        super.layoutSubviews()

        if let iv = imageView {
            iv.superview?.bringSubviewToFront(iv)
        }
        if let lbl = titleLabel {
            lbl.superview?.bringSubviewToFront(lbl)
        }
    }
}

上記のようにUILabelとUIImageViewを先頭に移動させれば解決します。(backgroundImageのImageViewは直接参照できないのでこれで)