【Swift】NavigationBarのボタンアイコンがグレーになる時の対処法

再現するのがかなり限定的な時なのですが、私は地味に困ったので備忘録としてまとめ。
タイトル通り、ナビゲーションバーのボタンアイコンが、特に何も指定していないのにグレーになってしまう時の対処法です。
起動時にいきなりそうなるのではなく、別のページへ遷移した後に元のページに戻ってくると発生していました。
別にボタン自体はタップできるので、動作に問題はなかったのですが…やはり見た目が気になるのでどうにかしたい!

 

で、いろいろ確認したところ、アラートとページ遷移時のアニメーションが原因でした。
アプリで「接続中です…」というメッセージをアラートで表示し、画面遷移するときに消すという処理を実装しているのですが、ページ遷移の際にオプションの animatedfalse にしていたのが悪かったようです。
具体的に書くと下記の通りです。

// View を移動する.
self.navigationController?.pushViewController([遷移先のViewController], animated: false)  // 画面遷移時のアニメーションを無効にする

こちらのオプションを false にすると、画面遷移時のアニメーションが無効になるのですが、その場合、アラートが正しく閉じられていないようで…そのせいで、ナビゲーションバーのボタンのアイコンがグレーになってしまっていたようです。
多分ですが、アラートが表示されている間に表示されるグレーの透明背景の影響で他のボタンがグレーになっていて、それが残ってしまっているのだと思います。

なので、ちゃんとアラートを閉じてからページ遷移するサンプルコードはこちら。

// アラートを閉じる
alert?.dismiss(animated: true, completion: nil)
// View を移動する.
self.navigationController?.pushViewController([遷移先のViewController], animated: true)

ちなみに、アラートを閉じる時のオプションの animatedfalse にすれば、ページ遷移時の animatedfalse にしても大丈夫なのでは!?と思い試して見ましたが…こちらの方法では、相変わらずボタンアイコンがグレーになってしまい、ダメでした。
調べてみれば方法はあるのかもしれませんが、現時点で確実なのは上記の方法かと思います。
とりあえず、現在は特に問題はないので、この方法を使用したいと思います。

 

以上、ナビゲーションバーのボタンアイコンがグレーになってしまう時の対処法でした。
だいぶ限定的なので、他に活用できるかは分かりませんが…ご参考になれば幸いです。

>株式会社シーポイントラボ

株式会社シーポイントラボ

TEL:053-543-9889
営業時間:9:00~18:00(月〜金)
住所:〒432-8003
   静岡県浜松市中央区和地山3-1-7
   浜松イノベーションキューブ 315
※ご来社の際はインターホンで「316」をお呼びください

CTR IMG