質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.48%

  • Swift

    7505questions

    Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

  • iOS 8

    118questions

    iOS 8(アイ・オーエス8)は、アップル社が2014年9月に発表したオペレーティングシステムです。iPhone 4sより対応しています。デザイン性の変更はなく、アプリや各種機能が強化されています。また、サードパーティ開発者のために、多くのAPIが開放されています。

【iOS】NavigationBarやTabBarを使用している際のUIStatusBarの文字色の変更について

解決済

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 1,927

Kesth

score 75

初投稿です。
現在X code6.4を使いswiftでアプリを制作しています。
今回はstatu barの文字色の変更の仕方について質問させてください。

Status Barの文字色を白くしようと考えているのですが、View Controllerごとに変更する場合、

①info.plistでView controller-based status bar appearanceをYESに設定。
②status barの文字色を変更したいview controller上で以下を記載

override func preferredStatusBarStyle() -> UIStatusBarStyle {
        return .LightContent
 }

上記の方法で変更できると思っていたのですが、上記を試してもstatusbarの色は
デフォルトの黒のまま。

いろいろ調べてみると、アプリでNavigationBarやTabBarを使っている場合は
上記の方法では変更ができず、別の方法が必要とのことでした。
(現に、私のアプリでもNavigationBarとTabBarを使用しています)

別の方法につき調べているのですが、どうもうまく変更ができず困っています。

NavigationBarとTabBarを使っている場合の、View ControllerごとのStatusbarの設定方法を教えていただけますでしょうか?

よろしくお願いします。




  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

+1

viewDidLoad内で以下のように実行した上で、statusbarの変更関数を読み込んでいます。

override func viewDidLoad() {
    super.viewDidLoad()
    self.setNeedsStatusBarAppearanceUpdate()
}

override func preferredStatusBarStyle() -> UIStatusBarStyle {
    return .LightContent
}


となるとUINavigationControllerがステータスバーの操縦を持っちゃってるのでUINavigationControllerに対して上記の処理を実行させる必要がありますね

一番手っ取り早いのはUINavigationControllerのサブクラスを用意してその中でステータスバーの更新処理を同じように実装してみると効果があるはずです

class ほにゃららNavigationController: UINavigationController {
    
    // init系については割愛
    
    override func viewDidLoad() {
        super.viewDidLoad()
        self.setNeedsStatusBarAppearanceUpdate()
    }
    
    override func preferredStatusBarStyle() -> UIStatusBarStyle {
        return .LightContent
    }
}

// 使ってるwindowにこんな感じでセットしてあげる
self.window.rootViewController = ほにゃららNavigationController(rootViewController: viewController)

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2015/08/02 01:04

    教えていただいた方法をためしたところ、無事解決出来ました!!
    丁寧に教えて頂き、本当にありがとうございました!

    キャンセル

0

setNeedsStatusBarAppearanceUpdate()はViewControllerクラス内で実行しましたか?
ステータスバーの変更を適用させるには上記の関数を呼び出す必要があります

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2015/08/01 19:48

    コメントありがとうございます。
    viewDidLoad内で以下のように実行した上で、statusbarの変更関数を読み込んでいます。


    override func viewDidLoad() {
    super.viewDidLoad()

    self.setNeedsStatusBarAppearanceUpdate()

       }

    override func preferredStatusBarStyle() -> UIStatusBarStyle {
    return .LightContent
    }


    上記をやっているのですが、Navigation Bar上ではStatusbarの色は黒のままです。
    ためしにNavigationBarに hidesBarsOnSwipe = true を行ったところ、
    スワイプしてNavigationBarが隠れた段階でStatusBarが白くなりましたが、スワイプを戻してNavigationBar上にStatusbarが戻るとまた黒く戻ってしまいます。

    こちらは何が原因なのでしょうか?
    度々お手数おかけします。




    キャンセル

関連した質問

  • 解決済

    UITableView swift

    質問です。 現在UIViewControllerの上にpagemenuを使って、UIViewController1,UIViewController2をおいています。 UI

  • 解決済

    swift ライブラリ pagemenu

    現在swiftのライブラリpagemenuを使っていて、2つのViewControllerを一つのViewControllerにもたせています。 class BaseView

  • 解決済

    swift

    やりたいこと 画面全体を覆うViewをaddSubiewしたい 詰まってること NavigationBar UITabbar 画面内にこの二つがあって、それらを覆

  • 受付中

    [Swift]画面遷移と同時にNavigationBarのtitleを変更したい

    ご覧いただき、有難うございます。 DropDownMenuのライブラリを使用しているのですが、 メニューの「Month」セルをタップすると、画面遷移と同時にナビゲーションバータ

  • 解決済

    NavigationBarの戻るボタンの連打防止

    前提・実現したいこと NavigationBar <Backボタンの連打防止 発生している問題・エラーメッセージ A->B->Cへ画面遷移した後 C画面にて表示されているNav

  • 解決済

    navigationBarごと覆いかぶさるようにpush遷移させたい

    通常のpushだと、”ナビバーは留まり、ナビバーのボタンがすり替わる"アニメーションになると思いますが、今回は"新たなナビバー付きの画面がナビバーの上から被さる"アニメーションで遷

  • 解決済

    iOSでNavigationBarの中央に画像を表示したい

    現在iOSでアプリ作成を行なっており 要件として「ヘッダー部分の中央にはアプリのロゴを常に表示したい」といったものがあります。 色々試してみたもののうまくいかずで困っております

  • 解決済

    Navigationbarが実装されているJSQMessagesViewControllerについて

     前提・実現したいこと Navigationbarの下からメッセージを始めたい。  発生している問題・エラーメッセージ Navigationbarから「Today 10:51 

同じタグがついた質問を見る

  • Swift

    7505questions

    Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

  • iOS 8

    118questions

    iOS 8(アイ・オーエス8)は、アップル社が2014年9月に発表したオペレーティングシステムです。iPhone 4sより対応しています。デザイン性の変更はなく、アプリや各種機能が強化されています。また、サードパーティ開発者のために、多くのAPIが開放されています。