ScrollView如何置底部?



  • ScrollView如何置底部?目前只知道contentOffset={{x:0,y:this.state.btmScrollHei}}可以设置滚动条位置,那又如何获得滚动条内容高度?



  • /**
         * 滚动到scrollview的最底端
         * @param 通过refs获得的scrollView对象
         */
        static scrollBottom(scrollView) {
            if (Platform.OS === 'android') { // android可以直接9999,ios不行,会滚出去
                scrollView.scrollTo({y: 9999});
            } else {
                NativeModules.UIManager.measure(scrollView.getInnerViewNode(),
                    (...arg) => {// x y width height pageX pageY
                        let contentHeight = arg[3];
                        NativeModules.UIManager.measure(scrollView.getScrollableNode(),
                            (...arg2) => {
                                let scrollHeight = arg2[3];
                                let scrollY = contentHeight - scrollHeight;// 内容高-容器高
                                if (scrollY > 0) { // 小于等于0说明没有滚动条不用滚动
                                    scrollView.scrollTo({y: scrollY});
                                }
                            });
    
                    });
            }
        }
    


  • @cnsnake11 说:

    getInnerViewNode

    好,谢谢 ! 回去试试。。



  • @cnsnake11 scrollView 为何总是获得为undefined.

    <ScrollView ref={(ref)=>this._scrollView=ref} /> 在某一方法中 var scrollView= this._scrollView; 这样获取总是获取不到这个对象。。你是怎样调用的?



  • 我是这样写的
    <ScrollView ref='sss' /> 在某一方法中 var scrollView= this.refs.sss;

    你那个写法应该也是对的啊



  • @cnsnake11 这边这样写也不行。 最顶层你是用这样的加载方式, ReactDOM.render(
    <MyComponent />,
    document.getElementById('example')
    );

    还是:

    AppRegistry.registerComponent 这样的?



  • 最顶层是 AppRegistry.registerComponent

    document.getElementById('example') 你这不是react native的写法啊?这是浏览器的写法吧。。



  • @cnsnake11 哦,我看的是http://bbs.reactnative.cn/topic/608/%E5%AF%B9%E7%BB%84%E4%BB%B6%E7%9A%84%E5%BC%95%E7%94%A8-refs , 我也是用AppRegistry的写法。 但是你那样的写法,我这边还是获取不到。



  • <ScrollView ref='sss' /> 在某一方法中 var scrollView= this.refs.sss;

    这里的某一方法必须是render这个ScrollView的对象的方法才行。



  • @cnsnake11 也就是ScrollView不能被其他比如View包裹吗?
    1:
    render(){
    return <ScrollView></ScrollView>;
    }
    2:
    render(){
    return <View><ScrollView></ScrollView></View>;
    }
    第二种方式获取不到?



  • 第二种可以获取得到。在render方法里就行。

    {

    aaa(){
    this.refs.sss;
    }

    render(){
    return <View><ScrollView ref='sss'></ScrollView></View>;
    }

    }

    调用方法和render是同一个对象的就行。



  • 此回复已被删除!


  • @cnsnake11 我的是你这样的写法。。就是获取不到。



  • 是这样:我建议你先写个特别简单的组件测一下refs的问题。

    class ADSDAD extends Component {

    aaaa{
    var scrollView= this.refs.ss;
    }

    render(){

    return <View><ScrollView ref='ss'></ScrollView><TouchableOpacity onPress={()=>this.fun()}></TouchableOpacity></View>;
    }

    }



  • @cnsnake11 行,谢了


登录后回复