2016-05-10 6 views
7

Ich möchte eine Ansicht haben, deren Breite auf die Breite des Containers reagiert, während das Seitenverhältnis beibehalten wird. Ich möchte Breite oder Höhe nicht hart codieren, sondern dynamisch und reaktionsfähig halten, damit es in mehreren Situationen als wiederverwendbare Komponente wiederverwendet werden kann.Wie wird die Höhe der Ansicht basierend auf ihrer Breite dynamisch festgelegt, indem das Seitenverhältnis beibehalten wird?

Ich hoffe, es funktioniert ähnlich wie dem folgenden Code:

<View style={{ 
    alignSelf: 'stretch', 
    aspectRatio: 1.5 
}} /> 

Es sollte sein Behälter Breite füllen und legen Sie seine eigene Höhe dynamisch auf der Basis seiner Breite.

Ist dies in reactive-native mit Flexbox möglich?

+0

Danke, dass Sie mich wissen lassen ** es gibt ** 'aspectRatio'-Eigenschaft in React Native! Ein solcher Sparer! –

Antwort

2

Als Hendy Irawan kommentierte: Reagieren india aspectRatio Eigenschaft StyleSheet hinzugefügt.

https://facebook.github.io/react-native/docs/layout-props.html#aspectratio

Aus dem Dokument:

aspectratio ?: Anzahl

Seitenverhältnis Steuerung der Größe der undefinierten Dimension eines Knotens. Das Seitenverhältnis ist eine nicht standardmäßige Eigenschaft, die nur in der reaktiven nativen und nicht in CSS verfügbar ist.

auf einem Knoten mit einer Satz Breite/Höhe-Seitenverhältnis Steuerung der Größe der ungesetzt Dimension eines Knoten mit einem Satz flex Verhältnisbasis Aspekte steuert die Größe des Knotens in der Querachse, wenn ungesetzt auf einem Knoten mit Ein Messfunktions-Seitenverhältnis funktioniert, als ob die Messfunktion die Flex-Basis misst. Auf einem Knoten mit Flex-Grow/Shrink-Seitenverhältnis steuert die Größe des Knotens in der Querachse, wenn nicht festgelegt. Das Seitenverhältnis berücksichtigt Min/Max-Dimensionen

So sollte folgendes funktionieren:

const styles = StyleSheet.create({ 
    view: { 
    aspectRatio: 1.5, 
    } 
}); 

// later in render() 
<View style={styles.view} /> 
1

Ja, Sie können die Dimensions API verwenden, um die Breite des Fensters zu erhalten, und dann die Höhe programmatisch festlegen. Normalerweise rufe ich die Dimensionen auf, sobald die App geladen wird, bevor Sie die Breite kennen müssen, und lassen Sie das Objekt dann einfach nach Bedarf passieren.

Dies könnte eine benutzerdefinierte Komponente sein, um Ihren Anwendungsfall zu erreichen.

import {Dimensions} from 'react-native' 

... 

const AspectView = ({style, aspectRatio, children, ...props}) => { 
    let {height, width} = Dimensions.get('window'); 
    return (
    <View style={[style, {height: width * aspectRatio}] {...props}>{children}</View> 
) 
} 
+0

Das hängt aber von der Breite von * window * ab, nicht vom * container * (parent). Wie wird es basierend auf der Breite des übergeordneten Elements festgelegt? –

+0

Ich glaube nicht, dass es so funktioniert (anders als bei Web CSS). Die beste Wette ist, das Elternprogramm programmatisch zu berechnen und es dann zu übergeben. –

+0

Ich verstehe nicht wirklich, warum das in der mobilen App nicht möglich ist. Wenn der Elternteil seine Breite kennt (ob fest oder berechnet), warum sollten die Kinder die Breite des Elternteils nicht bequem wissen dürfen. 'alignSelf =" stretch "' funktioniert wunderbar, also sollte es möglich sein, das etwas zu erweitern, damit das Kind ein Attribut basierend auf der Breite des Elterns (statt des Fensters) setzen kann? –

Verwandte Themen