Использование настраиваемых цветов на панели навигации

NavigationView является аналогом SwiftUI UINavigationController UIKit. NavigationView определяется Apple как «представление для представления стека представлений, представляющих видимый путь в иерархии навигации». Другими словами, он позволяет выполнять иерархическую навигацию между представлениями и добавляет панель навигации в верхней части экрана.

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

В SwiftUI в настоящее время нет простого способа настройки верхней панели навигации (т. Е. Изменения цвета панели навигации). Однако SwiftUI поддерживает возможность создания настраиваемых модификаторов представления, которые позволяют нам изменять или стилизовать представление по желанию. Некоторые встроенные модификаторы включают, среди прочего, font(), navigationBarTitle() и foregroundColor().

В этой статье я покажу вам, как создать собственный ViewModifier, который можно использовать для простой настройки панели навигации внутри вашего NavigationView. Чтобы создать свой модификатор, вам сначала нужно определить struct, который соответствует протоколу ViewModifier. Давайте определим NavigationBarColor struct:

Наш ViewModifier инициализируется с помощью backgroundColor и tintColor, первый будет использоваться как цвет панели навигации, а второй будет использоваться как цвет текста панели навигации. Эта настройка выполняется в init методе нашего модификатора. Метод body вернет содержимое как есть.

Чтобы использовать наш модификатор, мы можем создать расширение View, которое будет применять модификатор, который мы определили выше, например:

Теперь мы можем легко использовать этот модификатор в любом месте нашего приложения. Вот пример:

Если вы запустите приложение, теперь вы можете увидеть настроенную панель навигации.

При переходе к другому представлению стиль панели навигации сохраняется:

Это все! Это всего лишь один пример того, как мы можем использовать модификаторы представления в SwiftUI; модификаторы могут быть полезны для определения согласованных и многократно используемых стилей во всем приложении. Надеюсь, эта статья поможет вам в создании других полезных модификаторов.