tomoyaonishiのブログ

iOSのことを中心に・・・その他もあるよ!

iPhoneX && UITabBarController && UIToolbar && SafeArea && Blur

iPhoneXでUITabBarControllerのタブをhiddenにしてもSafeAreaが伸びてくれずに、タブ上部に表示しているUIToolbarのblurがHomeIndicatorまで伸びてくれない場合に以下の対応で対症療法できることが判明しました。

UITabbarの上にUIToolbarの構成で、UIToolbarはSafeArea.bottomに対して貼り付けている状態です。

f:id:tomoyaonishi:20171020195548p:plain:w300

UITabbarをhiddenにするとHomeIndicatorまでBlurが伸びません。

f:id:tomoyaonishi:20171020195821p:plain:w300

UITabBarがない場合のSafeArea.bottomの位置までUIToolbarを下げてあげる(-49.0pt)となんとBlurがHomeIndicatorまで伸びてくれます。たぶんiOSのバグですが、その場しのぎの対応であればこれがいいかもしれません。

class FirstViewController: UIViewController {
    @IBOutlet weak var bottomMargin: NSLayoutConstraint!
    
    @IBAction func hideBar(_ sender: Any) {
        guard let tab = tabBarController?.tabBar else { return }
        if tab.isHidden {
            tabBarController?.tabBar.isHidden = false
            bottomMargin.constant = 0.0
        } else {
            tabBarController?.tabBar.isHidden = true
            bottomMargin.constant = -49.0
        }
    }

}

f:id:tomoyaonishi:20171020200716p:plain:w300

UIBarPositioningなど考えうるものすべていじりましたがこれでしか直せませんでした。

なんかバックグラウンドいって戻ってくるとUITabBarがhiddenでもSafeAreaの位置が正しくなってるような気がするんですが、よくわかりません。。