Пользовательский компонент React Native не устанавливает размер компонента динамически
Я пытаюсь создать компонент RN, который отображает твиты. Я разветвлял отличный компонент RN, response-native-fabric-twitterkit и добавил компонент, который отображает твит. Пока все хорошо, но когда я хочу отобразить этот твит внутри ScrollView, я должен указать высоту и ширину компонентов, иначе он не будет отображаться. Есть идеи, что я делаю не так?
Вот мой раздвоенный компонент RN: https://github.com/adamivancza/react-native-fabric-twitterkit
И вот тестовое приложение, которое демонстрирует мою проблему: https://github.com/adamivancza/react-native-twitterkit-test
<View style={styles.container}>
<ScrollView
style={{ flex: 1 }}>
// this component is displayed because I've set a specific height
<Tweet
style={{ flex: 1, height: 200 }}
tweetId='788105828461006848'/>
// this component is not displayed
<Tweet
style={{ flex: 1 }}
tweetId='788105828461006848'/>
</ScrollView>
</View>
1 ответ
У проблемы github, связанной с @smilledge, есть ответ.
При динамическом добавлении представлений в нативный компонент кажется, что вам нужно вручную запустить цикл макета, чтобы реагировать на изменения. (возможно, связано с реакцией нативного обновления на теневое представление)
@Override
public void requestLayout() {
super.requestLayout();
post(measureAndLayout);
}
private final Runnable measureAndLayout = new Runnable() {
@Override
public void run() {
measure(
MeasureSpec.makeMeasureSpec(getWidth(), MeasureSpec.EXACTLY),
MeasureSpec.makeMeasureSpec(getHeight(), MeasureSpec.EXACTLY));
layout(getLeft(), getTop(), getRight(), getBottom());
}
};