Невозможно установить цвет оттенка полосы большого заголовка iOS 11
У меня возникла проблема с восстановлением цвета bartint для большого заголовка iOS 11 после того, как я установил прозрачную панель навигации.
Шаг воспроизведения:
- Установите фоновое изображение и тень на панели навигации, чтобы очистить UIImage().
- Панель навигации стала прозрачной.
- Установите фоновое изображение и тень панели навигации на ноль и верните цвет оттенка панели обратно.
- Большая панель навигации заголовка стала белого цвета; если прокрутить вниз (присутствует старая панель навигации), то вы можете увидеть цвет оттенка панели, примененный только к панели навигации старого стиля.
Пытался:
* Установите цвет фона навигации и цвет состояния на цвет оттенка полосы, да, он изменился, но без прозрачного визуального эффекта, как мы установили цвет оттенка полосы.
Кто-нибудь сталкивался с той же проблемой, что и я, и способен ли это исправить с помощью любого решения или обходного пути?
оригинал
После перебрал страницу с прозрачной навигацией и вернулся
К вашему сведению, я также применяю пользовательский контроллер навигации, чтобы переключиться с прозрачного на цвет по умолчанию,
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)]
Надеюсь это поможет!