2016-06-27 23 views
2

Ich entwickle eine iOS-Anwendung im nativen Modus. Ich habe die Navigator-Komponente von react native verwendet. Wenn ich den Benutzer von einem Bildschirm zum anderen schiebe, kann der Benutzer den Bildschirm durch Wischen am linken Bildschirmrand öffnen. Ich weiß, wie ich es im nativen iOS-Code deaktivieren kann. Aber gibt es eine Möglichkeit, dieses Verhalten in React-native App zu stoppen.So deaktivieren Sie die Wischgeste im reaktiven nativen Navigator

Danke,

Antwort

0

ich es unten Art und Weise gelöst,

Im Projekt reagiert ich node_modules Ordner. Es gibt Code für Navigator-Komponente auf diesem Weg

/node_modules/react-native/Libraries/CustomComponents/Navigator/Navigator.js

In dieser Datei gibt es Aktionen für Gestures auf Navigationen. Wenn Sie die Pop-Geste von dort entfernen, wird der Pop-Back-Vorgang beendet, wenn Sie vom linken Rand des Bildschirms nach oben schieben.

Ersetzen Sie einfach unten Code,

var GESTURE_ACTIONS = [ 
    'pop', 
    'jumpBack', 
    'jumpForward', 
]; 

mit diesem Code,

var GESTURE_ACTIONS = [ 
    'jumpBack', 
    'jumpForward', 
]; 
+0

Sehr schlechte Praxis, du solltest node_modules niemals selbst ändern! Wenn Sie auf eine neue Version aktualisieren, sind alle Ihre Änderungen verschwunden. Ganz zu schweigen davon, dass node_module fast immer in .gitignore sind, also wird niemand anders als Sie diese Änderungen sehen. – patotoma

+0

Es scheint eine temporäre Lösung zu sein und es hat funktioniert. Keine andere Lösung hat funktioniert. – Gaurav

0

Die Szene configs sind Objekte mit vielen overridable Eigenschaften in ihnen. Wenn Sie mit FloatFromBottom und deaktivieren Gesten beginnen möchten, können Sie dies tun:

configureScene={() => ({ 
    ...Navigator.SceneConfigs.FloatFromBottom, 
    gestures: {}, // or null 
}) 

Die Komponente sollte aushängen, wenn sie mit einem Pop-Geste entlassen.

+0

Versucht, Gesten hinzuzufügen: null/Geste: {}, aber es funktioniert nicht für mich. –

+0

Oh, ich habe keine Ideen mehr. –

13

hier gute Möglichkeit, es zu tun.

Sie müssen das Knotenmodul nicht hacken !!

Definieren Sie eine neue Szenenkonfiguration.

const NoBackSwipe ={ 
    ...Navigator.SceneConfigs.HorizontalSwipeJump, 
    gestures: { 
     pop: {}, 
    }, 
}; 

Sie können die SceneConfig kopieren, die sie geschrieben haben, und einfach die Pop-Geste auf {} setzen.

Auf diese Weise wird es nur die gewünschte Szene beeinflussen, und Sie können immer noch alle Standardkonfigurationen verwenden.

_configureScene(route){ 
    switch (route.name){ 
    case 'Foo': 
     return NoBackSwipe 
     break; 
    case 'Bar': 
     return Navigator.SceneConfigs.HorizontalSwipeJump 
     break; 
    } 
}; 

Der normale HorizontalSwipeJump hat noch einen backswipe, und der Brauch NoBackSwipe wird klauen nicht erlaubt zurück ...

<Navigator 
...other props... 
configureScene={ this._configureScene } 
/> 

Boom.

+0

Dies funktionierte im iOS-Simulator, aber nicht auf meinem Android-Gerät. –

+0

Welche Version RN? Diese Lösung funktioniert auf meinem Android-Simulator, RN v 0.28 – parker

+0

Ich betreibe RN 0.29.1. –

Verwandte Themen