Я не могу понять, почему borderRadius не работает с компонентом flatList

Я делаю чат в React Native, который выполняется с помощью компонента FlatList для отображения сообщений. Я пытаюсь сделать сообщения круглыми, но borderRadius не работает (слева, справа, сверху или снизу). Я обнаружил следующее: borderRadius не применяется к FlatList, но даже после добавления overflow: 'hidden' в мой код я не может показать ничего, кроме прямоугольников.

Код:

render(){
        return(
              <View style={styles.container}>
                  <View style={styles.messages}>
                      <FlatList
                          data={this.state.messages}
                          renderItem={({ item }) =>    this.renderTextItem(item)}
                          keyExtractor={(item, index) => index.toString()}
                          extraData={this.state.messages}
                      />
                  </View>
                  <KeyboardAvoidingView
                    style={styles.inputContainer}
                    behavior={(Platform.OS === 'ios') ? "padding" : null} enabled
                    keyboardVerticalOffset={Platform.select({ios: 80, android: 500})}
                  >
                        <TextInput
                            onChangeText={(text) => this.setState({userInput: text})}
                            value={this.state.userInput}
                            style={styles.textInput}
                            editable={this.state.inputEnabled}
                            placeholder={'Type something'}
                            autoFocus={true}
                            multiline={true}
                            onSubmitEditing={this.handleTextSubmit.bind(this)}
                        />
                  </KeyboardAvoidingView>
              </View>

          )
    }

Стили:

const styles = StyleSheet.create({
    container: {
        flex: 1,
        backgroundColor: colors.WHITE
    },
    messages: {
        flex: 1,
        marginTop: 20,
        overflow: "hidden"
    },
    botMessages: {
        color: colors.BLACK,
        backgroundColor: '#EEE',
        padding: 10,
        borderBottomLeftRadius: 90,
        borderBottomRightRadius: 90,
        borderTopLeftRadius: 90,
        marginBottom: 0,
        borderTopRightRadius:90,
        alignSelf: 'flex-start',
        bottom: 23,
        textAlign: 'left',
        width: '75%'
    },
    userMessages: {
        backgroundColor: colors.CHATREPLY,
        color: colors.WHITE,
        padding: 10,
        marginBottom: 10,
        marginRight: 5,
        borderBottomLeftRadius: 20,
        borderBottomRightRadius: 0,
        borderTopLeftRadius: 80,
        borderTopRightRadius: 20,
        width: '45%',
        alignSelf: 'flex-end',
        textAlign: 'left'
    },
    responseContainer : {
        flexDirection: 'row',
        marginTop: 20,
        marginBottom: 0,
    },
    inputContainer: {
        flex: 1/7,
        flexDirection: 'row',
        backgroundColor: '#FFF',
        borderTopWidth:1,
        borderColor: "#c9c9c9"
    },
    textInput: {
        paddingLeft: 20,
        marginBottom: 35,
    },
})

Добавление renderTextItem()

renderTextItem(item) {
        let style,
            responseStyle
        if (item.from === 'bot') {
            style = styles.botMessages
            responseStyle = styles.responseContainer
        } else {
            style = styles.userMessages
            responseStyle = {}
        }
        return (
            <View style={responseStyle}>
                <Text style={style}>{item.msg}</Text>
            </View>
        )
    }

person noideawhatimdoing    schedule 17.01.2020    source источник
comment
Вы хотите дать border-radius всему плоскому списку или каждому его элементу?   -  person Karan Mehta    schedule 17.01.2020
comment
Могли бы также показать нам код функции renderTextItem   -  person Vagtse    schedule 17.01.2020
comment
@Vagtse добавил функцию   -  person noideawhatimdoing    schedule 17.01.2020
comment
@KaranMehta только элементы (т.е. сообщения от пользователя и бота)   -  person noideawhatimdoing    schedule 17.01.2020
comment
Не могли бы вы добавить минимальный воспроизводимый пример? У меня нет готового шаблона React, и ваш код кажется неполным, поскольку быстрая вставка в Stackblitz вызывает множество ошибок. Тем не менее, я догадываюсь, в чем ошибка, но хочу убедиться сам, прежде чем опубликовать потенциально неверный ответ.   -  person CGundlach    schedule 17.01.2020


Ответы (2)


Попробуйте это: style={{borderRadius:6,overflow: 'hidden'}}

person Josymar De Leon    schedule 12.05.2020
comment
overflow: 'hidden' в этом случае помогло. Будет обрезано переполняющееся изображение. - person Charith Nidarsha; 21.05.2021

Я думаю, вам нужно использовать borderWidth, когда вы используете borderRadius.

person Çağlar Durmuş    schedule 17.01.2020
comment
Я пробовал это сделать, но он просто добавляет ширину, не влияя на радиус. - person noideawhatimdoing; 17.01.2020