App中双TableView垂直滚动同步问题及Y轴偏移获取失败求助
解决方案:Titanium双TableView垂直同步滚动(保留水平位置)
问题1:获取滚动Y值显示undefined的原因
你当前代码中使用this.y获取滚动偏移是错误的——Titanium的TableView的scroll事件不会将滚动偏移挂载到组件实例本身,而是通过事件回调的**参数对象e**返回。正确的垂直滚动偏移是e.contentOffset.y。
另外,代码中Dtm的Width属性是大写的,这不符合Titanium的属性命名规范(应为小写width),可能导致布局异常,建议修正。
问题2:实现垂直同步滚动(保留水平位置)
要实现左边Table滚动时,右边Table同步垂直位置且保留原有水平滚动位置,可按以下步骤修改代码:
修正后的核心代码
// 修正TableView属性名(Width → width) var Dtm = Ti.UI.createTableView({ left:0, width:170, // 改为小写width backgroundColor:'#fff', data:[], }); hv.add(Dtm); // 滚动事件处理:同步垂直偏移,保留水平位置 Dtm.addEventListener('scroll', function(e) { // 获取左边Table的垂直滚动偏移 var targetY = e.contentOffset.y; // 获取右边Table当前的水平滚动偏移(保留原有位置) var currentX = zeitnachweisView.contentOffset.x; // 同步右边Table的滚动位置:保持水平偏移,更新垂直偏移 zeitnachweisView.scrollTo(currentX, targetY); Ti.API.info("Y Wert: " + targetY); }); // 可选:如果需要双向同步(右边滚动时左边也同步),添加以下代码 zeitnachweisView.addEventListener('scroll', function(e) { var targetY = e.contentOffset.y; var currentX = Dtm.contentOffset.x; Dtm.scrollTo(currentX, targetY); });
关键说明
- 使用
TableView.scrollTo(x, y)方法精确控制滚动位置,其中x保留当前水平偏移,y同步为左边Table的垂直偏移,完美满足需求。 - 确保两个TableView的
contentHeight属性一致(或根据数据自动适配),否则可能出现滚动不同步的视觉差异。
内容的提问来源于stack exchange,提问作者Benjamin Knbben Zonda
相关产品推荐
相关产品推荐

