react native 仿微信朋友圈的评论自动定位

react native 仿微信朋友圈的评论自动定位

constructor(props) {    //es6 构造方法
        super(props);
        this.rowlayouts=[]; 
        this.scrollview = null;
        this.scrollview1 = null;   
        this.state = {
     
        };
    }

componentWillMount () {  //将要加载控件
    this.keyboardDidShowListener = Keyboard.addListener('keyboardDidShow',                             this._keyboardDidShow.bind(this));
    this.keyboardDidHideListener = Keyboard.addListener('keyboardDidHide',                             this._keyboardDidHide.bind(this));
 }

  componentWillUnmount () { //将要销毁控件
      this.keyboardDidShowListener.remove();
      this.keyboardDidHideListener.remove();
  }

  _keyboardDidShow (e) {  //当键盘弹出的时候要做的事
     this.key=e.startCoordinates.height    //拿到的值就是键盘的高度
       UIManager.measureInWindow(   //当前listview在屏幕的位置
                React.findNodeHandle(that.scrollview1),
                (sx, sy, sw, sh) => {
                    var showIndex = 19;   //listview 里面item的个数
                    var itemHeight = 0;
                    for (var i = 0; i <= showIndex; ++i) {
                        if (that.rowlayouts[i]) {
                            itemHeight += that.rowlayouts[i].height;
                        }
                    }
                    // 36是输入框的高度

                    var offset = Dimensions.get('window').height - sy - this.key-36;                     var newpos = itemHeight - offset;                     that.scrollview.scrollTo({x: 0, y: newpos});                 });

                    var newpos = itemHeight - offset;                     that.scrollview.scrollTo({x: 0, y: newpos});                 });
}

  _keyboardDidHide (e) {   //当键盘收缩的时候要做的事
    alert('Keyboard Hidden');
  }

 
 componentDidMount() {
       
    }


<ListView              
                 dataSource={this.state.ds1}   //数据源,你可以自己定
                 renderRow={this._renderRow12.bind(this)}   //单个的item
                 ref={(r) => this.scrollview1 = r}         //   当控件被创建后将ScrollView这个对象的引用就传给了                                                                                             this.scrollview1 这个变量 
/>


_renderRow12(rowData, sectionID, rowID){
      return(
         <TouchableOpacity
             onLayout={(e) => this.rowlayouts[rowID] = e.nativeEvent.layout}      //得到每一个一个对象数组(每个                                                                                                                         对象里面包含当前对象组件的度)
             style={styles.column}
         />

      )


  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值