【Swiftメモ】XLPagerTabStripで画面遷移時にNavigationControllerが消える場合の確認ポイント

SmartNewsやグノシー のように、スワイプやタブ選択による画面遷移を実現するライブラリである「XLPagerTabStrip」。

このライブラリをNavigationControllerと一緒に用いると、画面遷移先でNavigationControllerが消える(nil)になるという現象が起こり、かなり手こずったので解決方法をメモとして残しておく。

やりたかったこと

collectionViewのセルをタップしたら、ポップアップを表示し、ナビゲーションも含む全体を薄黒カラーのview(coverView)で覆う処理を実装したかった。

実装方法は単に全体を覆うViewをHiddenで用意しておき、セルがクリックされたらそれを表示するようにしていた。

 // ナビゲーションを含むViewを覆うcoverViewを追加
 self.navigationController?.view.addSubview(self.coverView)

// セルが押されたタイミングでcoverViewを表示
coverView.isHidden = false

しかし、画面遷移先のviewではこれがうまくできず、print(self.navigationController?.view)で調べてみるとnilが返ってきた。


対処方法

色々検証した結果viewDidLoadやviewWillAppearでSubviewに追加するのは無理だと言うことがわかった。

なので、遷移先の画面でSubViewを追加するにはviewWillLayoutSubviewsかviewDidLayoutSubviewsで読み込む必要がある。

override func viewWillLayoutSubviews() {
   // ナビゲーションを含むViewを覆うcoverView
  self.navigationController?.view.addSubview(self.coverView)
}

ライフサイクル難しい・・・。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA