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)
}
ライフサイクル難しい・・・。
created by Rinker
¥3,536
(2024/11/26 14:36:39時点 Amazon調べ-詳細)
(2024/11/26 14:36:39時点 Amazon調べ-詳細)