Heim > Web-Frontend > js-Tutorial > Was sind die Vorsichtsmaßnahmen im tatsächlichen Kampf gegen React Navigation?

Was sind die Vorsichtsmaßnahmen im tatsächlichen Kampf gegen React Navigation?

php中世界最好的语言
Freigeben: 2018-05-11 15:25:48
Original
1994 Leute haben es durchsucht

Dieses Mal werde ich Ihnen zeigen, was Sie im tatsächlichen Kampf der React Navigation beachten sollten. Schauen wir uns das Folgende an.

1. NavigationsleisteBei der Verwendung der Navigationsleiste treten die folgenden Probleme auf

1 Unten befindet sich eine schwarze Linie

Sie soll eine Seite erstellen, bei der die Farbe des Balkens mit der Farbe der Seite übereinstimmt. Nur wenn oben noch zwei weitere Knöpfe vorhanden sind. Am unteren Rand der Leiste wurde eine schwarze Linie gefunden. Dadurch kann die Leiste den gewünschten Seiteneffekt nicht gut erreichen. Nachdem Sie den Code in der Kopfzeile festgelegt haben, können Sie

static navigationOptions = {
 ...
 headerStyle: {
    ...
    borderBottomWidth: 0,
  },
 }
Nach dem Login kopieren

2 entfernen. Am unteren Rand der Android-Leiste befindet sich ein Schatten, und das benutzerdefinierte Hintergrundbild der Leiste kann nicht mit

Navigationsleiste reagieren In Android gibt es standardmäßig eine Höhe. Der visuelle Effekt besteht darin, dass unten ein Schatten entsteht. Ein weiterer störender Effekt entsteht, wenn eine benutzerdefinierte Leiste mit einem Hintergrundbild verwendet wird. Sie werden feststellen, dass das Hintergrundbild den Effekt einer unvollständigen Abdeckung hat. Es gibt immer eine Lücke an den Seiten. Dieses Problem tritt unter iOS nicht auf. Dieses Problem kann gelöst werden, indem das Höhenattribut auf Null gesetzt wird

 static navigationOptions = {
 ...
 headerStyle: {
    ...
    elevation: 0,
  },
 }
Nach dem Login kopieren

3. Das Problem der Zentrierung des Balkentitels in Android

In Android der Titel der Leiste ist linkszentriert. iOS ist standardmäßig zentriert. Sie können die folgende Schreibmethode verwenden, um

static navigationOptions = {
 ...
 headerTitleStyle: {
    //此属性是标题的Style属性。可以接受<Text>标签的style
    ...
    alignSelf: "center",
  },
 }
Nach dem Login kopieren
zu zentrieren, wenn auf der linken Seite keine Schaltflächen vorhanden sind. Es reicht aus, so zu schreiben. Aber wenn auf der linken Seite eine Return-Taste oder andere benutzerdefinierte Tasten vorhanden sind. Der Titel wird in Android versetzt. Die Lösung besteht darin, rechts eine leere Schaltfläche hinzuzufügen

static navigationOptions = {
 ...
 headerRight: <View />
 }
Nach dem Login kopieren

4. Die Navigationsleiste mit Hintergrundbild

unterscheidet sich von Yuansheng. In der Reaktionsnavigationsleiste gibt es kein Hintergrundbildattribut. Mit anderen Worten: Wenn wir die Navigationsleiste mit einem Hintergrundbild verwenden möchten, müssen wir eine benutzerdefinierte Ansicht verwenden.

import {Header} from "react-navigation";
//header 需导入
const ImageHeader = props => (
  <View>
    <Image
      style={{position: "absolute", zIndex: -1, width: "100%", height: "100%", resizeMode: "cover"}}
      source={require(...)}
    />
    <Header {...props} style={{backgroundColor: "transparent"}} />
  </View>
);
static navigationOptions = {
 ...
 headerStyle: {
   //背景颜色必须为透明,不然无法透出底部图片
   backgroundColor: "transparent",
   //安卓中不添加此属性会导致背景图无法铺满
   elevation: 0,
 },
  header: props => {
    return <ImageHeader {...props} />;
  },
 }
Nach dem Login kopieren

5. Gestenkonfliktproblem, wenn StackNavigator und DrawerNavigator verschachtelt sind

Wenn DrawerNavigator in StackNavigator verschachtelt ist. Nach dem Aufrufen der sekundären Schnittstelle von StackNav steht die Zurück-Geste im Konflikt mit dem Öffnen des DrawerNav-Menüs.

static navigationOptions = {
 ...
 //禁止打开菜单
 drawerLockMode: "locked-closed", 
 //允许使用返回手势
 gesturesEnabled: true,
 }
Nach dem Login kopieren
Ändern Sie diese Einstellung entsprechend Ihren Anforderungen

5.Problem mit der Inkonsistenz der Navigationsleistenhöhe

Bei Verwendung einer benutzerdefinierten Leiste. Android und iOS sind höchst inkonsistent. Android berechnet die Nav-Höhe von der Oberkante des Telefons aus. Standardmäßig verschiebt iOS die Höhe der Statusleiste nach unten. Um eine gleichmäßige Wirkung zu erzielen. Sie müssen die padding

Top-Eigenschaft der Android-Leiste auf die Höhe der Statusleiste einstellen

import {StatusBar, Platform} from "react-native";
navigationOptions = {
 ...
 headerStyle: {
   ...
   paddingTop: Platform.OS === "ios" ? 0 : StatusBar.currentHeight,
  },
 }
Nach dem Login kopieren
6. Verwenden Sie benutzerdefinierte Schaltflächen in der Navigationsleiste

Verwenden Sie headerRight Oder headerLeft kann die Schaltfläche oder Ansicht anpassen

static navigationOptions = {
 ...
 headerRight = (<TouchableOpacity style={{marginRight: 10}} onPress={...}>
        <Text style={styles.NavSureButton}>btn</Text>
      </TouchableOpacity>)
 }
Nach dem Login kopieren
Aber wenn die onPress-Methode this.props, this.state oder andere Methoden in der Klasse verwendet, treten in beiden Fällen Probleme auf

In der Seitenklasse verwenden wir static navigationOptions={...}, um einige Navigationskonfigurationen zu konfigurieren. Aber weil die durch Static geänderten Eigenschaften zu den statischen Eigenschaften der Klasse gehören. Die Eigenschaftsmethode hierfür kann nicht aufgerufen werden. Daher müssen wir die Methode this.props.navigation.setParams({key:value ...}) verwenden, um das Klickereignis der Header-Schaltfläche festzulegen.

class Demo extends React,Component{
 componentWillMount() {
  //绑定方法
  this.props.navigation.setParams({rightOnPress: this.rightBtnOnPress});
 }
 //点击方法
 rightBtnOnPress = ()=>{
  ...
 }
  static navigationOptions = ({navigation}) => {
    const params = navigation.state.params || {};
    let navigationOptions = {
    ...
    headerRight = (<TouchableOpacity style={{marginRight: 10}} onPress={params.rightOnPress}>
        <Text style={styles.NavSureButton}>btn</Text>
      </TouchableOpacity>)
    }
    return navigationOptions;
  };
  ...
}
Nach dem Login kopieren
Ich glaube, dass Sie die Methode beherrschen, nachdem Sie den Fall in diesem Artikel gelesen haben. Weitere spannende Informationen finden Sie in anderen verwandten Artikeln auf der chinesischen PHP-Website!

Empfohlene Lektüre:

JS behält eine Ziffer bei und entfernt Nichtziffern


JS behält zwei Dezimalstellen für Eingabezahlen bei Bestätigungscode

Das obige ist der detaillierte Inhalt vonWas sind die Vorsichtsmaßnahmen im tatsächlichen Kampf gegen React Navigation?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage