使用ScrollableView在iOS上无法使用滑动后退手势

时间:2016-08-17 18:37:38

标签: ios titanium appcelerator appcelerator-titanium appcelerator-alloy

我正在使用Appcelerator Studio 4.7和SDK 5.4.0GA。

我想使用滑动后退手势返回到上一个视图控制器,但即使我在屏幕的左边缘开始我的手势,我的触摸也会移动ScrollableView个视图。如果滑动后退手势未超过ScrollableView,则可以正常工作。

使用Titanium Studio 3.4时一切都很好。目前无法使用它,因为它不受支持,您甚至无法登录。

这个问题是因为Appcelerator Studio,而不是因为SDK版本。我尝试使用具有相同SDK版本的Titanium Studio和Appcelerator Studio,并且只有Appcelerator Studio出现此问题。这就是我一年前坚持使用Titanium Studio的原因,但现在它不可能。

以下是没有解决方案的相关主题:https://archive.appcelerator.com/topic/581/swipe-right-from-the-edge-to-go-back-to-the-previous-window-doesn-t-work-anymore-in-ios-using-sdk-3-5-1-ga-and-4-0-0-ga/4

修改。如何在2分钟内重现:

1)文件 - >新 - >移动应用项目 - >默认合金项目

2)添加名为scrollable

的新控制器

scrollable.xml:

<Alloy>
    <Window class="container">
        <ScrollableView>
            <ScrollView>
                <View height="5000" backgroundColor="#DBD6D6">
                    <Label top="20">View1</Label>
                </View>
            </ScrollView>
            <ScrollView>
                <View height="5000" backgroundColor="#FED2FB">
                    <Label top="20">View2</Label>
                </View>
            </ScrollView>
            <ScrollView>
                <View height="5000" backgroundColor="#DCEFD7">
                    <Label top="20">View3</Label>
                </View>
            </ScrollView>
        </ScrollableView>
    </Window>
</Alloy>

index.js:

function doClick(e) {
    var scrollableController = Alloy.createController('scrollable',{
    });

    var view = scrollableController.getView();
    $.index.openWindow(view);
}

$.index.open();

INDEX.XML:

<Alloy>
    <NavigationWindow>
        <Window class="container" id="index">
            <Label id="label" onClick="doClick">Press me</Label>
        </Window>
    </NavigationWindow>
</Alloy>

3)这就是全部!

1 个答案:

答案 0 :(得分:1)

首先,我在Appcelerator Studio上尝试过您的代码,所以我不确定在这种情况下Titanium Studio上发生了什么。

现在,由于Ti.UI.Window swipeToClose 属性在 Ti SDK 5.2.0.GA 之前不存在,因此您可以确定是否它真的是Studio错误或SDK功能。我确信这不是问题,只是误解。

来到您的查询,有两种方法(据我所知)提供 滑动到上一个窗口(让我们说SPW) 功能以及 Scrollable 功能,在 ScrollableView 及其父视图之间留一些填充,如下所示:

-Method 1 -

<Alloy>
    <Window class="container" backgroundColor="white">
        <ScrollableView backgroundColor="blue" clipViews="false" left="20" right="20">
            <View backgroundColor="red">
                <Label>View1</Label>
            </View>
            <View backgroundColor="green">
                <Label>View2</Label>
            </View>
            <View backgroundColor="cyan">
                <Label>View3</Label>
            </View>
        </ScrollableView>
    </Window>
</Alloy>

这些是我在您的代码中所做的更改:

  • 添加了20dp的左+右填充,这将启用SPW功能,但ScrollableView的宽度将更小。
  • 设置 clipViews 属性以显示相邻视图以获得更好的UI。如果将此属性设置为true,则SPW功能也可以正常工作。

-Method 2 - 仅当您使用 hitRect property

知道ScrollableView的确切维度时,它才有效
// replace the line in Method 1 with this one and apply the tss on it
<ScrollableView backgroundColor="blue" id="SC">

<强> scrollable.tss

   "#SC" : {
        // (x,y) is top-left corner of hitRect and height/width will determine its dimension where user can swipe the scrollable view
        // on remaining area, you can perform SPW feature 
        hitRect : {
            x : 100,
            y : 100,
            height : 200,   
            width : 200    
        }
    }

既然你已经看到了如何实现这两个功能的两种方式,我希望你发现它很有用。