【问题标题】:Titanium ScrollView Doesn't Grow When TableViewRow is Added添加 TableViewRow 时 Titanium ScrollView 不会增长
【发布时间】:2013-09-08 18:09:53
【问题描述】:

我有一个定义如下的滚动视图:

var view = Ti.UI.createScrollView({
    height: '100%',
    width: '100%',
    contentHeight: 'auto', 
    backgroundColor: '#fff',
    showVerticalScrollIndicator: true,
    layout: 'vertical'
});

在滚动视图的底部,我有一个表格视图。用户可以按一个按钮在表格视图的顶部插入一个新行。但是,当他们这样做时,滚动视图的内容区域不会增长,因此第一行(在表格视图的底部)不再显示。每次用户添加新行时,底部最旧的行不再显示。

如果我明确设置 contentHeight,那么我可以在每次用户添加新行时添加行的大小。不过我不想这样做。

有没有办法自动增长滚动视图以适应它的孩子,包括新的 tableview 行?

【问题讨论】:

    标签: ios titanium scrollview tableview appcelerator


    【解决方案1】:

    如果您使用的是旧版本的钛,您可以使用 postLayout 回调来适当地更新高度

    http://docs.appcelerator.com/titanium/2.0/#!/guide/Transitioning_to_the_New_UI_Layout_System-section-30088148_TransitioningtotheNewUILayoutSystem-BatchLayoutUpdates

    如果您使用的是更新版本,则应查看此文档。特别是关于 Batch Layout Updates 和 view 对象上 applyProperties 调用的使用

    http://docs.appcelerator.com/titanium/latest/#!/guide/Transitioning_to_the_New_UI_Layout_System

    【讨论】:

      【解决方案2】:

      tableview 的高度是多少?我不认为表格视图会随着新行的插入而“增长”。它保持相同的大小,但您可以滚动其内容。只是为了测试,尝试在添加行之前和之后记录 tableview 的高度。

      另外,您可能知道,将一个可滚动项目作为另一个可滚动项目内的 tableview 并不是最好的。

      【讨论】:

      • 我的tableview的高度没有设置,应该是自动的。表格视图也不滚动,我同意在另一个可滚动元素中包含一个可滚动元素会很糟糕。我找到了一个临时解决方案,在添加所有行之后在最后一行调用 appendRow(基本上将最后一行添加两次),这似乎有效。虽然这是一个 hacky 解决方案。
      • 不过,如果 tableview 正在扩展,滚动视图应该适合它。在一个项目中,我在滚动视图中添加了不同的视图,它会自动增长,但我没有设置 contentHeight 属性。您可以尝试将其排除在外。此外,除了 tableview 高度之外,您还可以在添加行之前和之后记录滚动视图的 contentHeight。只是为了确保一切都按预期进行。
      • 就是这样,如果我将其他视图添加到滚动视图,它会扩展。如果我使用 appendRow 方法而不是 tableview.data = data,它会扩展。由于某种原因,设置 tableview 数据不会导致 tableview 重新计算其高度。
      • 好的。如果appendRow 扩展了tableview,你大概可以使用insertRowBefore (Ti docs)。您应该可以先添加新行,然后它应该扩展 tableview。
      • 这正是我正在做的。我使用 insertRowBefore (带有一个漂亮的小动画),不幸的是,它将最底部的行推出了 scrollView 内容区域。这就是为什么我必须弄清楚最底部的行中是什么并在其上调用 appendRow,这似乎扩展了 scrollView。
      【解决方案3】:

      tableview 确实会增长以适应其子项。但是,如果您将 tableview 数据设置为

      tableView.data = data;
      

      它不会重新计算高度。相反,您必须删除所有行并使用 appendRow 方法,或者如果您只需要将一行添加到表的末尾(而不是开头),您可以使用 appendRow 方法而不先删除所有行.

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-07-15
        • 1970-01-01
        相关资源
        最近更新 更多