Настройка строки заголовка¶
Мы уже видели, как настраивать заголовок, но давайте повторим это еще раз, прежде чем переходить к другим опциям — повторение - ключ к обучению!
Настройка заголовка¶
Компонент Screen
принимает реквизит options
, который представляет собой либо объект, либо функцию, возвращающую объект, содержащий различные параметры конфигурации. Для заголовка мы используем title
, как показано в следующем примере.
1 2 3 4 5 6 7 8 9 10 11 |
|
Использование параметров в заголовке¶
Для того чтобы использовать параметры в заголовке, нам необходимо сделать проп options
для экрана функцией, возвращающей объект конфигурации. Может возникнуть соблазн попытаться использовать this.props
внутри options
, но поскольку он определяется до отрисовки компонента, this
не ссылается на экземпляр компонента, и поэтому никакие props не доступны. Вместо этого, если мы сделаем options
функцией, то React Navigation вызовет ее с объектом, содержащим { navigation, route }
- в этом случае нам важен только route
, который является тем же объектом, который передается в реквизит screen props как реквизит route
. Вы можете вспомнить, что мы можем получить параметры через route.params
, и поэтому ниже мы сделаем это, чтобы извлечь параметр и использовать его в качестве заголовка.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
|
Аргументом, передаваемым функции options
, является объект со следующими свойствами:
navigation
- Свойство navigation prop для экрана.route
- Свойство route prop для экрана.
В приведенном примере нам понадобился только параметр route
, но в некоторых случаях вы можете использовать и navigation
.
Обновление options
с помощью setOptions
¶
Часто бывает необходимо обновить конфигурацию options
для активного экрана из самого компонента mounted screen. Это можно сделать с помощью функции navigation.setOptions
1 2 3 4 5 6 7 |
|
Настройка стилей заголовков¶
При настройке стиля заголовка необходимо использовать три ключевых свойства: headerStyle
, headerTintColor
и headerTitleStyle
.
headerStyle
: объект стиля, который будет применяться кView
, оборачивающему заголовок. Если вы установите для негоbackgroundColor
, то это будет цвет вашего заголовка.headerTintColor
: кнопка "Назад" и заголовок используют это свойство в качестве цвета. В приведенном ниже примере мы установили белый цвет оттенка (#fff
), поэтому кнопка "Назад" и заголовок будут белыми.headerTitleStyle
: если мы хотим настроитьfontFamily
,fontWeight
и другие свойства стиляText
для заголовка, мы можем использовать это свойство.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
|
Здесь следует отметить несколько моментов:
- В iOS текст и значки строки состояния черные, и это не очень хорошо смотрится на темном фоне. Мы не будем обсуждать это здесь, но вы должны обязательно настроить строку состояния в соответствии с цветами вашего экрана как описано в руководстве по строке состояния.
- Заданная нами конфигурация применяется только к главному экрану; при переходе к экрану подробностей возвращаются стили по умолчанию. Теперь мы рассмотрим, как обмениваться
опциями
между экранами.
Совместное использование общих опций
на разных экранах¶
Часто бывает так, что на многих экранах требуется настроить заголовок одинаковым образом. Например, фирменный цвет вашей компании может быть красным, поэтому цвет фона заголовка должен быть красным, а цвет оттенка - белым. Удобно, что именно эти цвета мы используем в нашем примере, и вы заметите, что при переходе на экран DetailsScreen
цвета возвращаются к значениям по умолчанию. Было бы ужасно, если бы нам пришлось копировать свойства стиля заголовка options
из HomeScreen
в DetailsScreen
, причем для каждого компонента экрана, используемого в нашем приложении? К счастью, это не так. Вместо этого мы можем перенести конфигурацию в нативный навигатор стека под свойством screenOptions
.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
|
Теперь любой экран, принадлежащий Stack.Navigator
, будет иметь наши замечательные фирменные стили. Но, конечно же, должен быть способ переопределить эти опции, если это необходимо?
Замена заголовка пользовательским компонентом¶
Иногда требуется более широкий контроль, чем просто изменение текста и стилей заголовка - например, вместо заголовка можно вывести изображение или превратить заголовок в кнопку. В этих случаях можно полностью переопределить компонент, используемый для заголовка, и создать свой собственный.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
|
Вы можете задаться вопросом, почему именно headerTitle
, когда мы предоставляем компонент, а не title
, как раньше? Причина в том, что headerTitle
- это свойство, специфичное для стековых навигаторов, а headerTitle
по умолчанию соответствует компоненту Text
, который отображает title
.
Дополнительная конфигурация¶
Полный список доступных опций
для экранов внутри нативного стекового навигатора можно прочитать в справке createNativeStackNavigator
.
Резюме¶
- Вы можете настроить заголовок внутри свойства
options
компонентов экрана. Ознакомьтесь с полным списком опций в справке по API. - Реквизит
options
может быть объектом или функцией. Если это функция, то ей предоставляется объект с реквизитамиnavigation
иroute
. - Вы также можете указать общие
screenOptions
в конфигурации навигатора стека при его инициализации. Реквизит имеет приоритет над этой конфигурацией.