4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

overCurrentContextの時のnavigationController、tabbarControllerの振る舞い

Last updated at Posted at 2018-03-23

概要

よく、前の画面を表示したまま透過した画面を表示したいといったケースがあるかと思います。(ダイアログとか)
通常は self.present(controller!, animated: true, completion: nil) と書くことが多いと思いますが、ナビゲーションを持つ場合、タブバーを持つ場合での振る舞いがよくわかっていなかったので整理しました。

selfにpresentした場合

let controller = self.storyboard?.instantiateViewController(withIdentifier: "sec")
controller?.modalPresentationStyle = .overCurrentContext
self.present(controller!, animated: true, completion: nil)

スクリーンショット 2018-03-24 0.32.41.png

青が遷移先の画面です。
タブバーが表示されています。

navigationControllerにpresentした場合

let controller = self.storyboard?.instantiateViewController(withIdentifier: "sec")
controller?.modalPresentationStyle = .overCurrentContext
self.navigationController?.present(controller!, animated: true, completion: nil)

スクリーンショット 2018-03-24 0.32.41.png

selfと同じく、タブバーが表示されています。

tabBarControllerにpresnetした場合

let controller = self.storyboard?.instantiateViewController(withIdentifier: "sec")
controller?.modalPresentationStyle = .overCurrentContext
self.tabBarController?.present(controller!, animated: true, completion: nil)

スクリーンショット 2018-03-24 0.44.15.png

タブバーが表示されません。

まとめ

よくある、背景透過のダイアログを作りたい場合、タブバーは表示されて欲しくないので必然的に hidesBottomBarWhenPushed を使用してタブバーを明示的に隠す、またはtabBarControllerから遷移させて上げる必要がありそうです。
きっとNavigationControllerやTabBarControllerの仕組みを追うと当然の結果なのかもしれませんが、それは割愛。。

4
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?