Невозможно установить цвет оттенка полосы большого заголовка iOS 11

У меня возникла проблема с восстановлением цвета bartint для большого заголовка iOS 11 после того, как я установил прозрачную панель навигации.

Шаг воспроизведения:

  1. Установите фоновое изображение и тень на панели навигации, чтобы очистить UIImage().
  2. Панель навигации стала прозрачной.
  3. Установите фоновое изображение и тень панели навигации на ноль и верните цвет оттенка панели обратно.
  4. Большая панель навигации заголовка стала белого цвета; если прокрутить вниз (присутствует старая панель навигации), то вы можете увидеть цвет оттенка панели, примененный только к панели навигации старого стиля.

Пытался:

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

Кто-нибудь сталкивался с той же проблемой, что и я, и способен ли это исправить с помощью любого решения или обходного пути?

оригинал

введите описание изображения здесь

После перебрал страницу с прозрачной навигацией и вернулся

введите описание изображения здесь

К вашему сведению, я также применяю пользовательский контроллер навигации, чтобы переключиться с прозрачного на цвет по умолчанию,

class CustomNavigationController: UINavigationController {

override func viewDidLoad() {
    super.viewDidLoad()

    // Do any additional setup after loading the view.
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

override func pushViewController(_ viewController: UIViewController, animated: Bool) {

    super.pushViewController(viewController, animated: animated)
   self.setDefaultNavigationBar()

}

override func popViewController(animated: Bool) -> UIViewController? {
    self.setDefaultNavigationBar()
    return super.popViewController(animated: animated)

}

override func popToViewController(_ viewController: UIViewController, animated: Bool) -> [UIViewController]? {
    self.setDefaultNavigationBar()
    return super.popToViewController(viewController, animated: animated)

}

override func popToRootViewController(animated: Bool) -> [UIViewController]? {
    self.setDefaultNavigationBar()
    return super.popToRootViewController(animated: animated)
}


func setDefaultNavigationBar() {

    let navigationBarColor = UIColor(hexString: "#00b5baff")!
    self.navigationBar.setBackgroundImage(nil, for: .default)
    self.navigationBar.shadowImage = nil
    //self.navigationController?.navigationBar.backgroundColor = UIColor.clear
    //self.navigationController?.navigationBar.tintColor = UIColor.clear
    self.navigationBar.barTintColor = navigationBarColor

}

/*
// MARK: - Navigation

// In a storyboard-based application, you will often want to do a little preparation before navigation
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    // Get the new view controller using segue.destinationViewController.
    // Pass the selected object to the new view controller.
}
*/

}

1 ответ

Не уверен, что это кому-то поможет, но именно это сработало для меня, когда оттенок фона навигации стал белым после выбора "Предпочитает большие заголовки":

    let appearance = UINavigationBarAppearance()
    appearance.backgroundColor = FlatBlue()
    appearance.titleTextAttributes = [NSAttributedString.Key.foregroundColor : UIColor.white]
    navigationBar.standardAppearance = appearance
    navigationBar.scrollEdgeAppearance = appearance

Попробуйте обеспечить прозрачное изображение в качестве фонового изображения для достижения прозрачности. Это должно работать. Если это не сработает, попробуйте использовать приведенный ниже код, чтобы просто обновить цвета больших заголовков.

self.navigationController?.navigationBar.largeTitleTextAttributes = 
[NSAttributedStringKey.foregroundColor: UIColor.blue, 
 NSAttributedStringKey.font: UIFont(name: fontName, size: 30) ?? 
                             UIFont.systemFont(ofSize: 30)]

Надеюсь это поможет!

Другие вопросы по тегам