React Native Изменение цвета заголовка StackNavigator

Я делаю приложение в React Native и пытаюсь реализовать функцию, которая изменит цвет заголовка, а затем сразу же увидит изменение.

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

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

var globalStyles = Stylesheet.create({
    menuHex: {
        backgroundColor: '#6ed168'
    }
    ...other styles...
})

В меню используется следующий код. Переменная 'DrawerStack' в строке 2 содержит все мои экраны, но это не важно. В строке 6 я использую переменную «globalStyles.menuHex», которая взята из таблицы стилей в моем последнем фрагменте кода.

const DrawerNavigation = StackNavigator({
    DrawerStack: {screen: DrawerStack },
}, {
    headerMode:'float',
    navigationOptions: ({navigation}) => ({
        headerStyle: globalStyles.menuHex,
        title: 'Application',
        headerTintColor: 'black',
        headerLeft: <TouchableOpacity onPress={() => {
                    navigation.navigate('DrawerToggle')
                    }}>
                       <Image source = {menuIcon}/>
                  </TouchableOpacity>
})

})

Затем у меня есть эта функция, чтобы изменить шестнадцатеричное значение «переменной menuHex»

changetheme(itemValue){
    this.setState({theme: itemValue})
    if(itemValue === 'spring'){
      globalStyles.menuHex = {backgroundColor: '#6ed168'}        
    }
    else if(itemValue === 'summer'){
      globalStyles.menuHex = {backgroundColor: '#ffff00'}
    }
    else if(itemValue === 'autumn'){
      globalStyles.menuHex = {backgroundColor: '#ffa500'}
    }
    else if(itemValue === 'winter'){
      globalStyles.menuHex = {backgroundColor: '#ADD8E6'}

    } 

}

Моя проблема заключается в том, что при изменении переменной «menuHex» изменение не отображается до тех пор, пока я не нажму кнопку переключения меню или пока не поменяю страницы. Я хочу, чтобы цвет заголовка меню был изменен, когда функция changetheme() завершена.

Любая помощь приветствуется


person Prem P.    schedule 08.04.2018    source источник


Ответы (1)


Это мой код. Меня устраивает.

Замените mainColor на нужный вам цвет.

static navigationOptions = {
    title: strings('auth.btnLogin'),
    headerMode:"float",
    headerStyle: {
        backgroundColor: mainColor,
        elevation: null
    },

    headerTitleStyle: {
        fontWeight: '300',
        color: '#ffffff',
        fontSize: 20,
        flex:1,
        textAlign:"center"
    },
    // headerLeft: null
    backTitle: "Back",
    headerTintColor: '#fff',      
}
person Trọng Nguyễn Công    schedule 08.04.2018
comment
Итак, в моем случае вы имеете в виду: поместите эти статические параметры навигации в файл .js и экспортируйте их по умолчанию. Затем вложите мою переменную DrawerNavigation в другой навигатор стека и заставьте этот навигатор стека использовать этот navigationOption (переменная DrawerNavigation не может использовать этот navigationOptions, поскольку ей нужна переменная навигации для переключения меню). Или это не работает? - person Prem P.; 08.04.2018
comment
Даже если бы это сработало, как мне изменить переменную mainColor в вашем коде? - person Prem P.; 08.04.2018
comment
извините за мою ошибку, вы не можете установить цвет, созданный с помощью таблицы стилей. Если ты можешь. Он не будет отображаться без повторного рендеринга или setState. Но вы можете вызвать DrawerNavigation в компоненте, следуя этой [ссылке]stackoverflow.com/a/42444634/9615416 - person Trọng Nguyễn Công; 09.04.2018
comment
если вы хотите установить цвет перед переходом на этот экран или перед открытием этого экрана. Оставьте комментарий, я могу вам помочь - person Trọng Nguyễn Công; 09.04.2018
comment
Благодарю за ваш ответ. Это заставило меня задуматься о попытке установить цвет перед содержимым, что я и делаю, создавая загрузочный экран. Мой ответ на stackoverflow.com/questions/49620766/ Показывает, что я сделал, но по сути я создал страницу, которая запускает функцию. Эта функция устанавливает цвет меню, а затем переходит к следующей странице, которая в случае моего приложения является домашней страницей. - person Prem P.; 12.04.2018
comment
Чтобы уменьшить высоту заголовка, используйте `headerStyle: {height: 50},` - person Mohamed Raza; 22.07.2020