Как правильно повернуть и перевести текст на 90 градусов в React Native?

#react-native #layout #view #styles

Вопрос:

Я пытаюсь реализовать этот макет введите описание изображения здесь

Вот фрагмент кода моего представления

 <View style={[{
    flexDirection: 'row',
    backgroundColor: 'white', 
    borderRadius: 8
}]}>

    <Text style={{
        color: 'white',
        backgroundColor: 'red',
        paddingStart: 12,
        paddingEnd: 12,
        transform: [
            { rotate: '-90deg' },
        ]

    }}>{`Sample Text`}</Text>

    <View >

        <Text>Right Content will be here</Text>
    </View>
</View>
 

Выход

введите описание изображения здесь

Проблема моей нынешней реализации заключается в следующем

  • Повернутый вид не расположен в положении
  • Высота представления контейнера не зависит от ширины или высоты повернутого представления

Как я могу исправить это таким образом, чтобы он мог адаптировать параметры специальных возможностей размера шрифта?

Ответ №1:

Вы можете использовать трансформацию.

https://facebook.github.io/react-native/docs/transforms.html#proptypes

 myStyle: {
    transform: [{ rotate: '90deg'}]
}
 

Комментарии:

1. Спасибо за ваш ответ. Ну, я уже использовал его в своем существующем коде.

Ответ №2:

Что ж, проведя несколько исследований, я достиг своей цели. Где я манипулирую положением x, y текстового контейнера на основе высоты и ширины повернутого текста

Решение

 function MyComponent() {

    const [height, setHeight] = React.useState(0)
    const [width, setWidth] = React.useState(0)

    return (
        <View style={{ marginTop: 300 }}>


            <View style={[{
                flexDirection: 'row',
                backgroundColor: 'white',
                marginStart: 16,
                marginEnd: 16,
                borderRadius: 8,
                overflow: 'hidden',
                minHeight: width,
            }]}>

                <View style={{
                    backgroundColor: 'yellow',
                    transform: [
                        { translateX: -(width / 2 - height / 2) * 2 }
                    ]
                }}>
                    <Text
                        style={{
                            color: 'white',
                            backgroundColor: 'red',
                            paddingStart: 12,
                            paddingEnd: 12,
                            transform: [
                                { rotate: '-90deg' },
                                { translateY: (width / 2 - height / 2) },
                                { translateX: -(width / 2 - height / 2) }
                            ]

                        }}
                        onLayout={(e) => {
                            setHeight(e.nativeEvent.layout.height)
                            setWidth(e.nativeEvent.layout.width)
                        }}
                    >{`Sample Text`}</Text>
                </View>

                <View style={{
                    backgroundColor: 'yellow',
                    width: '100%',
                    justifyContent: 'center',
                    alignItems: 'center',
                    transform: [
                        { translateX: -(width / 2 - height / 2) * 2 }
                    ]
                }}>

                    <Text>Right Content will be here</Text>
                </View>
            </View>
        </ View>
    )
}
 

Выход

введите описание изображения здесь