Appcelerator - 在顶部插入行时停止表滚动

时间:2016-05-06 04:42:33

标签: scroll insert tableview appcelerator appcelerator-titanium

我目前正在使用Appcelerator studio v4.5.0和Ti SDK 5.2.2。这个问题涉及iOS和Android,因为行为似乎是相同的。

我想在表格的顶部插入数据。当我插入数据时,我希望表保持静态,即Twitter。数据应显示在用户当前正在查看的内容之上,除了用户之外,不会跳过或移动表。我尝试过的所有方法都会被添加的行数推下来。如果你添加足够的行 - 体验是不和谐的。

我已经尝试了以下所有结果:表格移动:

  • 保持源阵列周围,插入到那个"刷新"表格中的所有数据(此旧帖子 - Disable autoscroll top on insertRowBefore in a TableView in Appcelerator/Titanium
  • 使用table.insertRowBefore(index,row)和table.isertRowAfter(index,row)
  • 将行添加到新节并使用table.insertSectionBefore(index,section)和table.insertSectionAfter(index,section)
  • 将table.scrollable设置为false(只是为了给它一个)

我目前正在尝试使用知道行高/行数的混合物并使用table.scrollToIndex()或table.scrollToTop()。但到目前为止,这两者都会导致非常神奇的体验,特别是如果用户当前正在滚动。在Android上,这两个函数都占据有限位置,半行不可用。

是否有一个我错过的设置迫使表格执行此操作?或者它是纯索引,以及表中的索引5现在是索引7(在添加2行之后)并且表保持在索引5?我真的很讨厌必须围绕这个"设计。因为它显然是可能的。

任何帮助表示感谢。

1 个答案:

答案 0 :(得分:0)

好吧,似乎没有设置阻止表滚动插入,因为它实际上只是试图让用户保持最后的索引。但是,以下在iOS上相当无效。为了减轻Android上的跳跃,请使用@PrashantSaini方法。

在表格的滚动事件中,存储用户的位置:

var scrollPos;
self.addEventListener('scroll',function(e){
    if(Ti.Platform.osname === 'android'){
        scrollPos = e.firstVisibleItem;
    }else{
        scrollPos = e.contentOffset.y;
    }
}

然后,在插入行/部分之后,使用scrollToTop设置表的查看次数。

table.insertRowBefore(indexToInsert,tableData[i],{animated:false});

//Adjust the scroll position for the height of the row for iOS and index for Android
scrollPos += (Ti.Platform.osname === 'android')?1:200;

//Make table opaque for a while while it does its thing - Android only
if(Ti.Platform.osname === 'android'){table.opacity = 0.2;}

//Do the scroll
table.scrollToTop(scrollPos, {animated:false});

//Opacity back to normal in Android
if(Ti.Platform.osname === 'android'){table.opacity = 1.0;}

请注意,这会导致Android的跳转,并且还需要您知道要插入的行的高度。