如何实现在React Native上具有活动的尖/箭头/三角形选项卡?

时间:2019-02-12 08:20:56

标签: javascript css reactjs css3 react-native

似乎我需要使用一些额外的CSS才能实现以下内容: enter image description here

我已经有了这个组件:

  renderTabBar = props => (
    <View style={tabViewStyles.tabBar}>
      {props.navigationState.routes.map((route, i) => {
        return (
          <TouchableOpacity
            key={route.key}
            style={[
              tabViewStyles.tabItem,
              tabViewStyles.tabStyle,
              tabViewStyles[`tabStyle_${i}`],
            ]}
            onPress={() => this.setState({ index: i })}
          >
            <Text style={{ color: '#ffffff', fontFamily: 'montserratBold' }}>
              {route.title}
            </Text>
          </TouchableOpacity>
        );
      })}
    </View>
  );

在StyleSheet上使用此CSS:


  container: {
    flex: 1,
  },
  tabBar: {
    flexDirection: 'row',
    paddingTop: Constants.statusBarHeight,
  },
  onWhite: {
    color: globalStyles.whiteColor.color,
    backgroundColor: globalStyles.whiteColor.backgroundColor,
  },
  bolderFont: {
    fontFamily: 'montserratBold',
  },
  tabItem: {
    flex: 1,
    alignItems: 'center',
    padding: 26,
  },
  tabStyle: {
    marginHorizontal: 10,
    marginTop: 20,
    borderRadius: 2,
  },
  tabStyle_0: {
    backgroundColor: '#ff5252',
  },
  tabStyle_1: {
    backgroundColor: '#3da7dc',
  },
});

有了上面的内容,我得到了: enter image description here

因此,我仍然缺少该标签的尖头部分。

我还需要做什么?

2 个答案:

答案 0 :(得分:1)

您可以按照here所述使用Transforms的rotate属性。 最小示例:

<View style={{flex:1,justifyContent:'center',alignItems:'center'}}>
      <View style={{width:50,height:50,backgroundColor:'green'}}></View>
      <View style={{transform:[{rotateZ:'45deg'}],width:8,height:8,backgroundColor:'green',marginTop:-4}}></View>
  </View>

小吃示例here

答案 1 :(得分:0)

如果您想要纯样式的解决方案而不是图像,则可以执行以下操作:

const triangle = {
    width: 0,
    height: 0,
    backgroundColor: 'transparent',
    borderStyle: 'solid',
    borderLeftWidth: 50,
    borderRightWidth: 50,
    borderBottomWidth: 100,
    borderLeftColor: 'transparent',
    borderRightColor: 'transparent',
    borderBottomColor: '#ff5252',
    transform: [
      {rotate: '180deg'}
    ]
}

const Triangle = React.createClass({
  render: function() {
    return (
      <View style={[triangle, this.props.style]} />
    )
  }
})

https://codedaily.io/tutorials/22/The-Shapes-of-React-Native修改。