うるおいらんど

アプリ開発やサイト制作のメモとか。

【iOS11】UINavigationControllerで遷移時のアニメーションがおかしくなる時の対処法【高さ変更】

魚ライン
魚ライン

どうも。Reoです。

3記事目になりました。iOS11+UINavigationControllerシリーズです。

1記事目「【Swift4】UINavigationControllerのNavigationBarをカスタマイズしてみた。【高さ変更】
2記事目「【Swift4】UINavigationControllerのToolbarをカスタマイズしてみた【高さ変更】

 

さて今回は1記事目でUINavigationController上にあるNavigationBarの高さを変更したせいで、遷移時のアニメーションがおかしくなってしまった!というお話をしていきます。

具体的には以下のgifのようになってしまいます。



左がiOS10で動かした場合、右がiOS11で動かした場合です。

なんか遷移時に上下に伸縮しているのがわかるでしょうか。

 

UINavigationBarのカスタマイズの方の記事を元にしていきますので、よろしくお願いします。

 

Push時のアニメーションを直す!

まずは、UINavigationControllerを継承したクラス内に以下のように書きます。

前回の続きの場合は、CustomNavigationController内に書いています。

これでひとまずpushは直りました。



本当に何入れても直るのが不思議なんですが、一応ちゃんと実際と同じ高さを入れておくのがいいと思います。

適当に書いたら直ったしとても冴えてる(`・ω・´+)

でもまだpop時のアニメーションがかくつきます。

 

Pop時のアニメーションを直す!

こっちは結構荒療治なんですが、デフォルトのナビゲーションアイテムを使わないと直ります。

遷移先のViewController(SecondViewControllerとしました)で、ナビゲーションアイテムを追加します。

 

これで直りました。



 

デデーン!

以上と言いたいんですが、ナビゲーションアイテムをデフォルトから自分で設定したものに変更すると、何故かinteractivePopGestureRecognizerが効かなくなるんですよね。スワイプで戻れるやつです。

何故なんだ・・・。

自分のアプリでは使わないんですが、気になったので直してみました。

 

interactivePopGestureRecognizerを効くようにする!

CustomNavigationController内でデリゲートの設定をします。

あとはextensionで追加

これでスワイプでpopできるようになりました。

 



 

うひょー

 
今回のもgithubにあげたコードに追加しときました。
uruly/CustomNavigationController-CustomNavigationBar

 

ハマるかなと思ったけど勘が冴えているというか、案外あっさり解決しました。

おかげさまで、RobinのiPhoneX対応が終わりました。∩(〃・ω・〃)∩ ばんざーい
もう少しデバッグして明日中には審査に出します〜。


ではでは。

 

参考記事

Enable the Swipe Back Gesture (aka Interactive Pop Gesture) when using a UINavigationController with custom back button – pixeldock

魚ライン
モッピー!お金がたまるポイントサイト
魚ライン

Swiftの記事一覧を見る

コメント

コメントは認証制です。詳しくは下記の注意をお読みください。

コメントを残す

コメント時の注意

「Twitter」「Facebook」「Google+」「WordPress」のいずれかのアカウントをお持ちの方は各アカウントと連携することでコメントできます。 コメントしたことはSNSに流れませんので、アカウントをお持ちの方はこちらの方法でコメントを投稿して下さると嬉しいです。 アカウントをお持ちでない方はメールアドレスで投稿することができます。 初回コメント時は承認後に表示されます。

魚ライン 魚ライン