【问题标题】:React Native swiper not working in StackNavigator for IOSReact Native swiper 在 iOS 的 StackNavigator 中不起作用
【发布时间】:2019-11-03 23:55:55
【问题描述】:

在我的应用中,我有登录屏幕忘记密码屏幕注册屏幕。在注册屏幕中,我使用react-native-swiper 显示注册过程的三个步骤幻灯片。我在 StackNavigator 中封装了这些屏幕,并将这个 StackNavigator 渲染为我的 App.js 中的根组件。

这是我的 StackNavigator

Router.js

import { createDrawerNavigator, createAppContainer, createStackNavigator } from 'react-navigation';
import Login from './src/containers/Login';
import SignUp from './src/containers/SignUp';
import ForgotPassword from './src/containers/ForgotPassword';

const AuthStackNavigator = createStackNavigator({
    Login: {
        screen: Login
    },
    ForgotPassword: {
        screen: ForgotPassword
    },
    SignUp: {
        screen: SignUp
    },
});

const Router = createAppContainer(AuthStackNavigator)

export default Router

App.js

import React, { Component } from 'react';
import { Provider } from 'react-redux';
import configureStore from './src/store/configureStore';
import Router from './Router';

const store = configureStore()

class App extends Component {
    render() {
        return (
            <Provider store={store}>
                <Router />
            </Provider>            
        );
    }
}

export default App

SignUp.js

import React, { Component } from 'react';
import { View, StyleSheet, TouchableOpacity, KeyboardAvoidingView, Platform, Dimensions } from 'react-native';
import Swiper from 'react-native-swiper';
import Colors from '../../config/Colors';
import Logo from '../components/Logo';
import MText from '../components/MText';
import StepButton from '../components/StepButton';
import SignUpStepOne from './SignUpStepOne';
import SignUpStepTwo from './SignUpStepTwo';
import SignUpStepThree from './SignUpStepThree';

class SignUp extends Component {

  static navigationOptions = ({navigation}) => ({
    header: null
  });

  constructor(props) {
    super(props);
    this.state = {
      activeStep: 0
    };
  }

  slideToNext = () => {
    this.swiper.scrollBy(1, true);
    this.setState(prevState => ({
      activeStep: prevState.activeStep + 1
    }))
  }

  slideToPrev = () => {
    this.setState(prevState => ({
      activeStep: prevState.activeStep - 1
    }), () => {
      this.swiper.scrollBy(-1, true);
    })
  }

  render() {
      <KeyboardAvoidingView style={styles.container} behavior="padding">
        <View style={{ flex: 1, paddingHorizontal: 10 }}>

          <Logo />

          <Swiper
            style={{
              
            }}
            ref={(swiper) => { this.swiper = swiper; }} 
            containerStyle={{ flex: 1 }}
            showsButtons={false}
            showsPagination={false}
            loop={false}
            scrollEnabled={false}
            onIndexChanged={(activeStep) => {
              this.setState({
                activeStep
              })
            }}
          >
            <SignUpStepOne onNext={this.slideToNext} />
            <SignUpStepTwo onNext={this.slideToNext} onPrev={this.slideToPrev} />
            <SignUpStepThree onNext={this.slideToNext} onPrev={this.slideToPrev} />
          </Swiper>

        </View>
      </KeyboardAvoidingView>
  }
}

但是,问题是当我使用 this.props.navigation.navigate('SignUp')登录屏幕 导航到 注册屏幕 时,Swiper 组件在注册屏幕。它只是空白。安卓可以正常运行,IOS不行。

另外需要注意的是,如果我只是在 App.js 中将注册屏幕呈现为根,那么它可以正常工作。

如果我在 StackNavigator 中将 SignUp 屏幕设置为初始屏幕,那么它也可以正常工作。

请任何人帮助我这里出了什么问题?

【问题讨论】:

  • 你可以尝试更改this.props.navigation.navigate('SignUp') => this.props.navigation.push('SignUp')
  • 感谢@hongdevelop 的评论,但是没用。
  • 我可以看看你的注册页面吗?
  • 我对 Redux 了解不多,但我认为是 Redux 出了问题。
  • 它只是由TextInput 和下一个,上一个按钮组成。

标签: reactjs react-native react-native-navigation stack-navigator react-native-swiper


【解决方案1】:

我找到了解决办法。

removeClippedSubviews={false} 道具添加到 swiper。然后就可以了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-17
    • 1970-01-01
    相关资源
    最近更新 更多