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
网友评论