美文网首页
UIListView 刷新后恢复到刷新前的位置

UIListView 刷新后恢复到刷新前的位置

作者: Nimanggi | 来源:发表于2019-03-25 14:05 被阅读0次

    UIListView在执行reload()后滚动层会重置到起始位置。
    在某些场合下,可能会有刷新后保持滚动层原位置不变的需求,例如从列表中移除某个item后保持显示位置不变。
    简单的处理办法:

    UIListView继承了UIScrollView,这里要利用UIScrollView的属性去解决这个问题。

    例如有一个这样的UIListView

    listView = cc.ui.UIListView.new({
        direction = 1,
        alignment = 2,
        viewRect = cc.rect(0,0,660,725),
        async = true,
    })
    :setPosition(cc.p(22.8, display.bottom + 232))
    :addTo(layer)
    

    在删除或是添加操作时,保存当前滚动层的位置。

    scrollViewPosition = listView.position_
    

    这个position_是UIListView从UIScrollView继承过来的属性。
    在使用时直接【.】出来,使用listView.scrollNode:getPosition()得到的内容有问题(原因没有仔细调查)所以直接上属性了。

    在刷新之后重新设置滚动层位置

    listView.scrollNode:setPosition(scrollViewPosition)
    

    scrollNode既是UIListView的滚动层Node,也是从UIScrollView中继承来的。

    另外还可以通过UIListView的scrollTo方法(从UIScrollView中继承来的),来设置当前滚动层位置。
    如下:

    -- 滚动到最下
    local tempHeight = 0
    for i,v in ipairs(self.memberList.items_) do
        tempHeight = tempHeight + v:getBoundingBox().height
         if tempHeight > self.memberList.viewRect_.height then
            self.memberList:scrollTo(0, 0) 
         end
    end
    

    相关文章

      网友评论

          本文标题:UIListView 刷新后恢复到刷新前的位置

          本文链接:https://www.haomeiwen.com/subject/syvvvqtx.html