可展开的文本元素无法正确显示全文

时间:2016-12-26 15:59:47

标签: javascript ios react-native

我试图理解一个教程,该教程构建了一组面板,这些面板在点击时展开以显示更多文本,并在点击时折叠以隐藏除标题之外的所有内容。

当我在iOS模拟器上运行时,面板会初始化打开并显示所有文本。如果我折叠其中一个面板并重新打开它,它只显示前两行文本,我甚至无法滚动查看其余文本。如果我再次折叠它,面板似乎重新初始化为正确的大小,显示所有文本,然后开始折叠动画。

我认为问题在于切换,但我不确定动画为什么不将面板扩展到正确的高度。

class Panel extends Component{
constructor(props){
    super(props);

    this.state = {
        title       : props.title,
        expanded    : true,
        animation   : new Animated.Value()
    };
}

toggle(){
    let initialValue    = this.state.expanded? this.state.maxHeight + this.state.minHeight : this.state.minHeight,
        finalValue      = this.state.expanded? this.state.minHeight : this.state.maxHeight + this.state.minHeight;

    this.setState({
        expanded : !this.state.expanded
    });

    this.state.animation.setValue(initialValue);
    Animated.spring(
        this.state.animation,
        {
            toValue: finalValue
        }
    ).start();
}

_setMaxHeight(event){
    this.setState({
        maxHeight   : event.nativeEvent.layout.height
    });
}

_setMinHeight(event){
    this.setState({
        minHeight   : event.nativeEvent.layout.height
    });
}

render(){
    let icon = this.icons['down'];

    if(this.state.expanded){
        icon = this.icons['up'];
    }

    return (
        <Animated.View
            style={[styles.container,{height: this.state.animation}]}>
            <View style={styles.titleContainer} onLayout={this._setMinHeight.bind(this)}>
                <Text style={styles.title}>{this.state.title}</Text>
                <TouchableHighlight
                    style={styles.button}
                    onPress={this.toggle.bind(this)}
                    underlayColor="#f1f1f1">
                    <Image
                        style={styles.buttonImage}
                        source={icon}
                    ></Image>
                </TouchableHighlight>
            </View>

            <View style={styles.body} onLayout={this._setMaxHeight.bind(this)}>
                {this.props.children}
            </View>

        </Animated.View>
    );
}
}

1 个答案:

答案 0 :(得分:0)

您可以使用提供此类设施的react-native软件包引用此软件包,它可以帮助您react-native-accordion