Hier ist ein Testcode zu beachten:
render() {
return <View style={{flex: 1,backgroundColor: "cornflowerblue"}}>
<View style={{backgroundColor: "chartreuse"}}><Text>Nothing (17px)</Text></View>
<View style={{flex: 0, backgroundColor: "yellow"}}><Text>flex: 0 (17px)</Text></View>
<View style={{flex: 0, flexBasis: 10, backgroundColor: "brown"}}><Text>flex: 0, flexBasis: 10 (10px)</Text></View>
<View style={{flex: 0, flexGrow: 1, backgroundColor: "orange"}}><Text>flex: 0, flexGrow: 1 (97px)</Text></View>
<View style={{flex: 0, flexShrink: 1, backgroundColor: "tan"}}><Text>flex: 0, flexShrink: 1 (17px)</Text></View>
<View style={{flex: 0, flexGrow: 1, flexBasis: 10, backgroundColor: "purple"}}><Text>flex: 0, flexGrow: 1, flexBasis: 10 (90px)</Text></View>
<View style={{flex: 0, flexShrink: 1, flexBasis: 10, backgroundColor: "gray"}}><Text>flex: 0, flexShrink: 1, flexBasis: 10 (10px with 7px hidden below the next element)</Text></View>
<View style={{flex: 1, backgroundColor: "blue"}}><Text>flex: 1 (80px)</Text></View>
<View style={{flex: 1, flexBasis: 10, backgroundColor: "cornsilk"}}><Text>flex: 1, flexBasis: 10 (90px)</Text></View>
<View style={{flex: 1, flexGrow: 1, backgroundColor: "red"}}><Text>flex: 1, flexGrow: 1 (80px)</Text></View>
<View style={{flex: 1, flexShrink: 1, backgroundColor: "green"}}><Text>flex: 1, flexShrink: 1 (80px)</Text></View>
<View style={{flex: 1, flexGrow: 1, flexBasis: 10, backgroundColor: "aqua"}}><Text>flex: 1, flexGrow: 1, flexBasis: 10 (90px)</Text></View>
<View style={{flex: 1, flexShrink: 1, flexBasis: 10, backgroundColor: "pink"}}><Text>flex: 1, flexShrink: 1, flexBasis: 10 (90px)</Text></View>
</View>;
}
Hier ist ein Screenshot des obigen Codes:
Hinzugefügt width
und height
:
render() {
return <View style={{flex: 1,backgroundColor: "cornflowerblue"}}>
<View style={{flex: 0, backgroundColor: "orange"}}><Text>flex: 0 (17px)</Text></View>
<View style={{flex: 0, width: 700, height: 20, backgroundColor: "yellow"}}><Text>flex: 0, width: 700, height: 20 (20px)</Text></View>
<View style={{flex: 0, flexBasis: 10, width: 700, height: 20, backgroundColor: "brown"}}><Text>flex: 0, flexBasis: 10, width: 700, height: 20 (10px with 7px hidden below the next element)</Text></View>
<View style={{flex: 0, flexGrow: 1, width: 700, height: 20, backgroundColor: "orange"}}><Text>flex: 0, flexGrow: 1, width: 700, height: 20 (90px)</Text></View>
<View style={{flex: 0, flexShrink: 1, width: 700, height: 20, backgroundColor: "tan"}}><Text>flex: 0, flexShrink: 1, width: 700, height: 20 (20px)</Text></View>
<View style={{flex: 0, flexGrow: 1, flexBasis: 10, width: 700, height: 20, backgroundColor: "purple"}}><Text>flex: 0, flexGrow: 1, flexBasis: 10, width: 700, height: 20 (80px)</Text></View>
<View style={{flex: 0, flexShrink: 1, flexBasis: 10, width: 700, height: 20, backgroundColor: "gray"}}><Text>flex: 0, flexShrink: 1, flexBasis: 10, width: 700, height: 20 (10px with 7px hidden below the next element)</Text></View>
<View style={{flex: 1, backgroundColor: "orange"}}><Text>flex: 1 (70px)</Text></View>
<View style={{flex: 1, width: 700, height: 20, backgroundColor: "blue"}}><Text>flex: 1, width: 700, height: 20 (70px)</Text></View>
<View style={{flex: 1, flexBasis: 10, width: 700, height: 20, backgroundColor: "cornsilk"}}><Text>flex: 1, flexBasis: 10, width: 700, height: 20 (80px)</Text></View>
<View style={{flex: 1, flexGrow: 1, width: 700, height: 20, backgroundColor: "red"}}><Text>flex: 1, flexGrow: 1, width: 700, height: 20 (70px)</Text></View>
<View style={{flex: 1, flexShrink: 1, width: 700, height: 20, backgroundColor: "green"}}><Text>flex: 1, flexShrink: 1, width: 700, height: 20 (70px)</Text></View>
<View style={{flex: 1, flexGrow: 1, flexBasis: 10, width: 700, height: 20, backgroundColor: "aqua"}}><Text>flex: 1, flexGrow: 1, flexBasis: 10, width: 700, height: 20 (80px)</Text></View>
<View style={{flex: 1, flexShrink: 1, flexBasis: 10, width: 700, height: 20, backgroundColor: "pink"}}><Text>flex: 1, flexShrink: 1, flexBasis: 10, width: 700, height: 20 (80px)</Text></View>
</View>;
}
Hier ist ein Screenshot des obigen Codes:
flex: 0
(Standard)
flex: 0
- Element nimmt die Größe des Inhalts an. Laut Dokumentation sollte die Größe nach Einstellungen
width
und height
Requisiten bemessen sein, aber es scheint zum Inhalt zu passen, wenn diese nicht festgelegt sind.
flex: 0, flexBasis: {{px}}
- Element nimmt die durch angegebene Größe an
flexBasis
flex: 0, flexGrow: 1
- Mit
flex: 0
und flexGrow: 1
; Dies entspricht dem Hinzufügen der Größe des Inhalts (im obigen Beispiel ist es a) zur Größe eines Elements, auf das festgelegt ist flex: 1
. Es ist ähnlich, flex: 1, flexBasis: 10
außer dass Sie anstelle einer Anzahl von Pixeln die Größe des Inhalts hinzufügen.
flex: 0, flexShrink: 1
- Mit
flex: 0
und flexShrink: 1
scheint das Element die Größe des Inhalts anzunehmen, mit anderen Worten, es ist dasselbe wie nur flex: 0
. Ich wette, es gibt Situationen, in denen es größer als der Inhalt wäre, aber das habe ich noch nicht gesehen.
flex: 0, flexGrow: 1, flexBasis: {{px}}
- Dies ist dasselbe,
flex: 0, flexGrow: 1
außer dass anstelle des Hinzufügens der Inhaltsgröße zu einem flex: 1
Element die angegebene Anzahl von Pixeln hinzugefügt wird .
flex: 0, flexShrink: 1, flexBasis: {{px}}
- Dies ist das gleiche wie
flex: 0, flexBasis: {{px}}
.
flex: 0, height: {{px}}
- Mit
flex: 0
, height
wird behandelt wie flexBasis
. Wenn beide a height
und gesetzt flexBasis
sind, height
wird ignoriert.
flex: 1
flex: 1
flex: 1, flexBasis: {{px}}
- Mit
flex: 1
und flexBasis: {{px}}
; Der Wert von flexBasis
wird zur Größe des Elements addiert. Mit anderen Worten, es ist, als würde man ein flex: 1
Element nehmen und die Anzahl der durch festgelegten Pixel hinzufügen flexBasis
. Wenn also ein flex: 1
Element 50 Pixel groß ist und Sie hinzufügen, ist flexBasis: 20
das Element jetzt 70 Pixel groß.
flex: 1, flexGrow: 1
flex: 1, flexShrink: 1
flex: 1, flexGrow: 1, flexBasis: {{px}}
- Dies ist das gleiche wie
flex: 1, flexBasis: {{px}}
da flexGrow
ignoriert wird.
flex: 1, flexShrink: 1, flexBasis: {{px}}
- Dies ist das gleiche wie
flex: 1, flexBasis: {{px}}
da flexShrink
ignoriert wird.
flex: 1, height: {{px}}
- Mit
flex: 1
, height
wird ignoriert. Verwenden Sie flexBasis
stattdessen.
Hier sind meine Beobachtungen:
- Tipp zur Fehlerbehebung: Stellen Sie sicher, dass die übergeordneten Ansichten den Kindern Raum zum Wachsen / Schrumpfen geben. Beachten Sie, dass
flex: 1
in der übergeordneten Ansicht nicht alle untergeordneten Elemente angezeigt werden, wie Sie es erwarten würden.
- Tipp zur
Hot Reloading
Fehlerbehebung : Verwenden Sie diese Option nicht, um diese Werte zu testen. Nach einigen Ladevorgängen können Elemente falsch angezeigt werden. Ich empfehle, + (viel) zu aktivieren Live Reload
oder zu verwenden .commandr
- Der Standard-Flex-Wert ist
flex: 0
. Wenn Sie keinen Flex-Style-Wert hinzufügen, wird standardmäßig 0 verwendet.
- Tipp zur Fehlerbehebung: Fehlerbehebung Wenn Sie versuchen, herauszufinden, warum etwas nicht so angezeigt wird, wie Sie es sich vorstellen, beginnen Sie mit dem (am meisten) übergeordneten Element und stellen Sie sicher, dass es den Kindern genügend Platz bietet, um das zu tun, was sie tun müssen. Mit anderen Worten, stellen Sie es auf flex: 1 ein und prüfen Sie, ob dies hilfreich ist. Gehen Sie dann zum nächsten Kind und wiederholen Sie den Vorgang.
- Es scheint, als würde
width
es immer berücksichtigt, flexDirection: "column"
unabhängig von den anderen Flex-Requisiten. Gleiches gilt für height
mit flexDirection: "row"
.
- Nach dem Ausführen dieser Test im Allgemeinen würde ich
flexBasis
über height
da flexBasis
Trümpfe height
.