LoginSignup
8
3

More than 5 years have passed since last update.

TransitionStyleをカスタマイズした時にStatusBarのスタイルを動的に変更できなかった話

Last updated at Posted at 2015-08-03

イケイケな画面遷移を作りたい事、よくあると思います。
Facebookのインタラクティブな画面遷移アニメーションは使っててとってもきもちいいですね。

StatusBarの色が変わらない!

また、画面遷移をカスタマイズする際に、StatusBarの文字色を動的に変更する事もよくある、と思います。
いろいろな諸事情のため、iOS7,iOS8両方対応しなければならなかったけども、
どうも iOS7の時だけ、StatusBarの文字色が動的(各画面毎)に変更ができない!
調べてみた所、UIWindowのrootViewControllerはうまく更新がされているみたい。
そして、遷移先のUIViewControllerにてsetNeedsStatusBarAppearanceUpdate()を呼ぶと、
rootViewControllerのpreferredStatusBarStyle()が呼ばれるみたいです。謎でした

こちらがStatusBarの更新がうまくいかなかったUIViewControllerです。

SecondViewController
    required init(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)

        // Set Custom Transition Style
        self.modalPresentationStyle = .Custom
        self.transitioningDelegate = transDelegate
    }

    override func viewDidLoad() {
        super.viewDidLoad()

        // Update Statusbar Style
        setNeedsStatusBarAppearanceUpdate()
    }

    // Override Statusbar Style
    override func preferredStatusBarStyle() -> UIStatusBarStyle {
        return .LightContent
    }

modalPresentationCapturesStatusBarAppearance

問題はこれです。UIViewControllerのプロパティである
modalPresentationCapturesStatusBarAppearance
遷移元のStatusBarAppearanceを遷移先で上書きするかどうかがBool値で定義できます。
ドキュメントをちゃんと見てみると、modalPresentationStyleがUIModalPresentationFullScreenでない限り、デフォルトでfalseが定義されているみたいです。
上記の処理は以下のようにすればうまくいくようです。

FixedSecondViewController
    required init(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)

        // Set Custom Transition Style
        self.modalPresentationStyle = .Custom
        self.transitioningDelegate = transDelegate

        // Takeover StatusBar Appearance
        self.modalPresentationCapturesStatusBarAppearance = true
    }

結論

結果的には、通常のモーダル表示のような全画面が切り替わるような時には、
modalPresentationStyleに.Customを指定しない方がスマートっぽいです。
遷移前のStatusBarStyleに左右されない、例えばUIAlertControllerのような画面遷移をする場合には.Customを指定し、
全画面差し代わるTransitionの場合は.FullScreenを指定し、各画面毎にStatusBarStyleを指定するようにしています。

8
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
8
3