If you use a component with TabHeading instead of the string header, using tabStyle , textStyle on Tab or TabHeading will not work (at least for now). You will need to style your TabHeading , Icon and Text manually.
Here is an example -
This will not work
<Tabs tabBarUnderlineStyle={{borderBottomWidth:2}}> <Tab heading={<TabHeading> <Icon name="icon_name" /> <Text>Popular</Text> </TabHeading>} tabStyle={{backgroundColor: 'red'}} textStyle={{color: '#fff'}} activeTabStyle={{backgroundColor: 'red'}} activeTextStyle={{color: '#fff', fontWeight: 'normal'}}> // tab content </Tab> <Tab heading={<TabHeading> <Icon name="icon_name" /> <Text>Popular</Text> </TabHeading>} tabStyle={{backgroundColor: 'red'}} textStyle={{color: '#fff'}} activeTabStyle={{backgroundColor: 'red'}} activeTextStyle={{color: '#fff', fontWeight: 'normal'}}> // tab content </Tab> </Tabs>
This will not work even if you move tabStyle and other items to the TabHeading component.
But it will work
<Tabs tabBarUnderlineStyle={{borderBottomWidth:2}}> <Tab heading={<TabHeading style={{backgroundColor: 'red'}}> <Icon name="icon_name" style={{color: '#ffffff'}} /> <Text style={{color: '#ffffff'}}>Popular</Text> </TabHeading>}> // tab content </Tab> <Tab heading={<TabHeading style={{backgroundColor: 'red'}}> <Icon name="icon_name" style={{color: '#ffffff'}} /> <Text style={{color: '#ffffff'}}>Popular</Text> </TabHeading>}> // tab content </Tab> </Tabs>
If you want an active tab style change
<Tabs tabBarUnderlineStyle={{borderBottomWidth:2}} initialPage={this.state.currentTab} onChangeTab={({ i }) => this.setState({ currentTab: i })}> <Tab heading={<TabHeading style={this.state.currentTab == 0 ? styles.activeTabStyle : styles.inactiveTabStyle}> <Icon name="icon_name" style={this.state.currentTab == 0 ? styles.activeTextStyle : styles.inactiveTextStyle} /> <Text style={this.state.currentTab == 0 ? styles.activeTextStyle : styles.inactiveTextStyle}>Popular</Text> </TabHeading>}> // tab content </Tab> <Tab heading={<TabHeading style={this.state.currentTab == 1 ? styles.activeTabStyle : styles.inactiveTabStyle}> <Icon name="icon_name" style={this.state.currentTab == 1 ? styles.activeTextStyle : styles.inactiveTextStyle} /> <Text style={this.state.currentTab == 1 ? styles.activeTextStyle : styles.inactiveTextStyle}>Popular</Text> </TabHeading>}> // tab content </Tab> </Tabs>
I tried β a solution. This sucks! (in my opinion).
So I went with the initial answer and decided not to have an icon in the tab title (which would be a better deal than delaying a state change)
I also noticed that they have tabStyle and other props for TabHeading , so maybe they are working on this, and is this just a bug at the moment?

In any case, I just wanted to point it out.
source share