перевод статьи от Eduardo Santi
Это короткая статья которая поможет вам решить вопрос между версиями iOS 14 и iOS15 за 3 минуты.
Введение
Финальная версия iOS 15 в итоге была публично выпущена 20 сентября и Apple представил много новых особенностей, как любой разработчик в экосистеме Apple, мы часто настраиваем наши приложения для предоставления удобного использования для наших пользователей.
Один из таких случаем связан с навигационной системой использующей UINavigationBar, в частности в приложении в котором я работаю на данный момент. Настройка навигационной панели не применялась как в случае с iOS 14, это стало сюрпризом.
После нескольких часов поиска, я вспомнил что с iOS 13 Apple представил класс настройки отображения(Appearance) в UIKit с названием UINavigationBarAppearance. Често, я е помнил об существовании данного класса, и на практике все разработчики iOS с кем я обращаюсь также не используют его. Как я сказал, давайте посмотрим как использовать этот класс если у вас есть навигационная панель до iOS 14.
. . .
Кодинг
Давайте настроим навигационную панель как делали ранее, получится что вроде такого:
// Название(title) Navigation Controller title = "UINavigationBar on " + UIDevice.current.systemVersion // Настройка нашего navigation bar navigationController?.navigationBar.isTranslucent = false navigationController?.navigationBar.tintColor = .white navigationController?.navigationBar.barTintColor = .red navigationController?.navigationBar.titleTextAttributes = [.font: UIFont.boldSystemFont(ofSize: 20.0), .foregroundColor: UIColor.white]
Этот код имеет разный результат между iOS 14 и iOS 15
И сейчас давайте посмотрим как мы может стандартизировать нашу навигационную панель в зависимости от версий iOS.
// Название(title) Navigation Controller title = "UINavigationBar on " + UIDevice.current.systemVersion let appearance = UINavigationBarAppearance() appearance.configureWithOpaqueBackground() appearance.backgroundColor = .red appearance.titleTextAttributes = [.font: UIFont.boldSystemFont(ofSize: 20.0), .foregroundColor: UIColor.white] // Настройка нашего navigation bar navigationController?.navigationBar.tintColor = .white navigationController?.navigationBar.standardAppearance = appearance navigationController?.navigationBar.scrollEdgeAppearance = appearance
Некоторое рассмотрение этого обновления:
- Вам не нужно использовать свойство isTranslucent потому что мы указываем внешний вид как непрозрачный с использованием метода configureWithOpaqueBackground()
- Мы должны использовать свойство titleTextAttributes настроек внешнего вида(Appearance) вместо навигационной панели
- После настроек нового внешнего вида, мы определяем что навигационная панель будет получать эти настройки через свойство standartAppearance
- Мы также может определить что навигационная панель будет посылать эти настройки если у нас есть подкласс и скролл навигационной панели
Теперь итоговый результат
. . .
Рассмотрение выходящие за рамки
Мы можем использовать такие же настройки отображения для других компонентов которые мы часто используем, таких как UITabBarApppearance в UIToolBarAppearance, потому что этот класс наследуется от UIBarAppearance как UINavigationBarAppearance что мы видели ранее. Для того чтобы посмотреть все классы которые могут быть настроены, вы можете обратиться к официальной документации Apple.
Надеюсь я способствовал нашему взаимодействию в данной статье. Если это было полезно для вам, распространите это другим разработчикам и не стесняйтесь подписываться на меня, комментировать и хлопать.