You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 07:32:03