Reagieren Native: Festlegen von flex:1 auf eine ScrollView contentContainerStyle Ursachen von überlappenden Komponenten
Problem:
Ich habe eine ScrollView mit 2 Untersichten und ich möchte der erste von Ihnen (nennen wir es ViewA) {flex: 1}, so dass die anderen (ViewB) halten an der Unterseite des Bildschirms - aber nur, wenn Ihre Höhe ist kleiner, der Bildschirm. Natürlich, wenn Sie höher sind als der Bildschirm, ich will ihn zu scrollen als gewöhnlich.
Fall 1 (GUT): ViewA mit dem langen text, ViewB scrollt mit. https://rnplay.org/apps/slCivA
Fall 2 (SCHLECHT): ViewA mit kurzen text, ViewB nicht auf den Boden kleben. https://rnplay.org/apps/OmQakQ
Versuchte Lösung:
Damit ich die ScrollView Stil UND contentContainerStyle zu flex: 1. Ich
Auch legen Sie ViewA den Stil flex:1. Aber wenn ich es tun, die ScrollView ist contentContainer Blick ist fixiert auf den Bildschirm-Höhe, also nicht zu scrollen, wenn nötig, und noch schlimmer - ViewB überschneidungen ViewA.
Fall 3 (SCHLECHT): ViewB bleibt am Boden, aber die ganze Sache nicht scrollen. https://rnplay.org/apps/wZgtWA
Ob es ein bug ist - wie fix/workaround?
Wenn es das erwartete Verhalten - wie kann ich das erreichen was ich beschrieben habe?
Dank.
Ja - hier ist es: rnplay.org/apps/wZgtWA . Beachten Sie, dass auch ohne ViewB, sobald Sie
flex:1
auf contentContainerStyle Sie können nicht die Seite scrollen.InformationsquelleAutor David Avikasis | 2015-11-12
Du musst angemeldet sein, um einen Kommentar abzugeben.
Versuchen Fütterung
{flexGrow: 1}
zu den contentContainerStyle prop stattdessenDies sollte die Antwort sein tbh
Dieser arbeitete für mich, aber statt flexGrow ich verwendet
flex: 1
InformationsquelleAutor Collin Tharp
Ok, so war ich nicht in der Lage, um es arbeiten von styling allein, aber hier ist, wie ich es gemacht habe:
onLayout
, undmeasure
)measure
Rückruf, füge ich die Höhe (falls erforderlich), um ein spacer-Ansicht zwischen ViewA und ViewB um ViewB auf der Unterseite.meine CJSX-code (abgespeckte und vereinfachte version):
Es ist sehr vereinfachten code, ist (meiner Ansicht nach hat die Anforderungen viel mehr spezifische dann dieser..), aber ich hoffe, es hilft jemand.
InformationsquelleAutor David Avikasis
Ok, ich habe eine Probe hier, und ich glaube, ich habe das problem gelöst. Das wichtigste, was ich Tat, war machen einen main-container-Ansicht mit zwei inneren Blick auf, dann legen Sie die inneren Ansichten zu flex auf 80% und 20% (Sie können einstellen, um es so Aussehen, wie Sie wollen).
https://rnplay.org/apps/O4UxFA
Das zu erreichen, was ich denke, dass Sie im Sinn haben, werden Sie wahrscheinlich benötigen, um einige Berechnungen basieren auf verschiedene Dinge, die sich in der Ansicht, und rerender wenn gescrollt werden. Werfen Sie einen Blick auf github.com/facebook/react-native/blob/master/Libraries/ReactIOS/... . Dies wird Ihnen ermöglichen, Elemente Messen. Dann werden Sie wahrscheinlich benötigen, um die Berechnung der anzeigen Höhe mit so etwas wie Dimensionen oder Reagieren Nativen Gerät (npmjs.com/package/react-native-device), und legen Sie die Stile dynamisch .
Danke, ich bin genau das zu tun, und es geschafft, ein akzeptables Ergebnis. Aber es ist so chaotisch und ich dachte, vielleicht ist es nur ein bug oder so etwas.
InformationsquelleAutor Nader Dabit