Swift 4 - стиль строки состояния конкретного контроллера представления не меняется - PullRequest
0 голосов
/ 02 июня 2018

После реализации UIViewController кажется, что цвет содержимого строки состояния по какой-то причине не меняется (по-прежнему остается черным).Как можно программно изменить его на «светлый» режим (белого цвета), используя только Swift 4.0 только для этого конкретного UIViewController?Не все приложение.

ViewController.swift класс

import UIKit

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()            
        view.backgroundColor = UIColor.blue

        self.title = "Hello World"
        self.navigationController?.navigationBar.barTintColor = UIColor.gray
        self.navigationController?.navigationBar.prefersLargeTitles = true
        self.navigationController?.navigationItem.largeTitleDisplayMode = .automatic

        self.navigationController?.navigationBar.largeTitleTextAttributes = [
            NSAttributedStringKey.foregroundColor: UIColor.white,
            NSAttributedStringKey.font : UIFont.preferredFont(forTextStyle: .largeTitle)
        ]
    }

    override var preferredStatusBarStyle: UIStatusBarStyle {
        return .lightContent
    }
}

enter image description here

Джейк.предложение Ланге

enter image description here

Ответы [ 3 ]

0 голосов
/ 02 июня 2018

Можете ли вы проверить в файле Info.plist, установлен ли этот флаг "Просмотр внешнего вида строки состояния на контроллере" на NO.Необходимо установить значение YES, чтобы разрешить внешний вид на основе контроллера.

0 голосов
/ 30 июля 2019

Работа для меня:

override func viewWillAppear(_ animated: Bool) {
  super.viewWillAppear(animated)

  self.navigationController?.navigationBar.barStyle = .blackTranslucent
  self.navigationController?.navigationBar.titleTextAttributes = [.foregroundColor: UIColor.white]
}

override var preferredStatusBarStyle: UIStatusBarStyle {
  return .lightContent
}
0 голосов
/ 02 июня 2018

Ваш UINavigationController - тот, который устанавливает предпочитаемый StatusBarColor.Бьюсь об заклад, если вы попытаетесь представить этот VC вместо нажатия на контроллер навигации, вы увидите стиль световой строки состояния.

Что вы, вероятно, захотите сделать вместо этого, это реализовать собственный контроллер навигации и переопределить предпочтительный статусстиль бара.

class CustomNavController: UINavigationController {
    override var preferredStatusBarStyle: UIStatusBarStyle {
        return .lightContent;
    }
}

РЕДАКТИРОВАТЬ:

Исходя из комментариев, вы, вероятно, захотите сделать, установить предпочтительный цвет строки состояния, какой бы ViewController был самым верхним из UINavigationController.Вот расширение, которое делает это, с этим расширением вам больше не нужен класс CustomNavController, описанный выше, просто используется обычный UINavigationController.Вам также нужно будет переопределить предпочтительный стиль строки состояния в каждом из ваших контроллеров представления.Отдайте должное этому вопросу SO, см. Здесь для более подробных обсуждений стиля стиля и навигационных контроллеров: favourStatusBarStyle не вызывается

extension UINavigationController {
    open override var childViewControllerForStatusBarStyle: UIViewController? {
        return self.topViewController
    }

    open override var childViewControllerForStatusBarHidden: UIViewController? {
        return self.topViewController
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...