Status barの設定を変更する childForStatusBarHidden・prefersStatusBarHidden編

目指せStatus barマスター その1。

開発環境

> xcodebuild -version
Xcode 14.0
Build version 14A5229c

Xcodeはbetaだが本記事の内容はiOS16未満のAPIを使用。

モチベーション

Status barマスターになりたい。Status barの設定をシュッと変えられるようにする。

UIViewControllerが持つStatus bar関係のプロパティ・メソッド

現時点で使用可能なプロパティ・メソッドは7つある。多い。

順に見ていく。本記事はchildForStatusBarHiddenとprefersStatusBarHiddenを試す。

childForStatusBarHidden

https://developer.apple.com/documentation/uikit/uiviewcontroller/1621451-childforstatusbarhidden

The view controller whose status bar hidden/unhidden status should be used.

「Status barの非表示/表示の状態を使用するview controllerを指定する。」

よく分からない。

If your container view controller derives the hidden state of the status bar from one of its child view controllers, implement this method to specify which child view controller you want to control the hidden/unhidden state. If you return nil or do not override this method, the status bar hidden/unhidden state for self is used.

「コンテナのview controllerが子view controllerからStatus barの非表示状態を取得する場合、このメソッドを実装して、非表示/表示を制御したい子view controllerを指定する。このメソッドをオーバーライドしない場合、selfのStatus barの非表示/表示状態が使用される。」

子view controllerのStatus barの表示設定をコンテナ(親)のview controllerに反映させたい場合に利用するプロパティ。
(ドキュメントがpropertyではなくmethodになっていたのでフィードバックを出した。結構同じ記述が見受けられるので昔はメソッドだった?)

さっそく書いてみた。

スクリーンショット

A B

グレーの部分が子view controller。

  • A: 子view controllerで prefersStatusBarHidden をtrueに
  • B: 子view controllerで prefersStatusBarHidden をfalseに

コード

import UIKit

final class ViewController: UIViewController {
    override var childForStatusBarHidden: UIViewController? {
        if let child = children.first as? ChildViewController {
            return child
        }
        return nil
    }
}

final class ChildViewController: UIViewController {
    override var prefersStatusBarHidden: Bool {
        return true  // or `false`
    }
}

コンテナのview controller設定はStoryboard上で行った。Container Viewを親のview controllerに追加して、紐づくview controllerのクラスに ChildViewController を指定。

所感

本記事からStatus bar関連の投稿を複数行っていく予定。というのも、Status barの設定はいつも行き当たりばったりになってしまっていて、現時点で体系的な知識が身につけられていない。頻繁に設定する機会があるわけではないが、一度Status bar関連の公式ドキュメントを読んで試してみて知識を身につけていく。

コンテナのview controller周りの設定は公式で丁寧に説明されているので参考にした。

https://developer.apple.com/documentation/uikit/view_controllers/creating_a_custom_container_view_controller

参考