terreb
terreb

Reputation: 1467

Nativescript: how to programmatically disable / enable ScrollView scrolling?

Is there a way to programatically disable/enable ScrollView scrolling in NativeScript?

Upvotes: 5

Views: 6301

Answers (6)

If anyone is looking for this, you can set isUserInteractionEnabled to false in the ScrollView element and it will disable the user scrolling (you can still do it programmatically).

https://github.com/NativeScript/NativeScript/issues/2892#issuecomment-253536941

Upvotes: 1

Mudlabs
Mudlabs

Reputation: 579

iOS

scroll_view.ios.scrollEnabled = false; // Disables user scrolling.
scroll_view.ios.scrollEnabled = true; // Enables user scrolling.

Android

scroll_view.android.setScrollEnabled(false); // Disables user scrolling.
scroll_view.android.setScrollEnabled(true); // Enables user scrolling.

Upvotes: 4

Hataki
Hataki

Reputation: 105

use this

this.scrollview.isUserInteractionEnabled=false;

or this

this.scrollView.nativeElement).android.getParent().requestDisallowInterceptTouchEvent(false);

for android

Upvotes: 0

kenny
kenny

Reputation: 1776

Angular 2 Version:

In your html:

<ScrollView #scrollView >
  ...
</ScrollView>

In your controller:

@ViewChild('scrollView') scrollView: ElementRef;

allowScrolling(e) {
    const scrollView: ScrollView = this.scrollView.nativeElement;
    if (platformModule.device.os === 'Android') {
        scrollView.nativeView.requestDisallowInterceptTouchEvent(e);
    }
    if (platformModule.device.os === 'iOS') {
        scrollView.ios.scrollEnabled = !e;
    }
}

Upvotes: 2

terreb
terreb

Reputation: 1467

Ok, I found how to do that. It's actually pretty easy on iOS:

var scrollView = page.getViewById('YOUR_VIEW_ID')
scrollView.ios.scrollEnabled = false // to disable
scrollView.ios.scrollEnabled = true  // to enable back

Android:

Also for my particular case, where I need to disable scrolling of the Scroll View, but drag and drop child views inside. On subview start dragging (panning) event we prevent touch events interception in our Scroll View by:

scrollView._nativeView.requestDisallowInterceptTouchEvent(true)

And enable them again on stop dragging (panning) subview event by:

scrollView._nativeView.requestDisallowInterceptTouchEvent(false)

If you have another case and just want to disable Scroll View scrolling you can use something like this (for Android):

scrollView._nativeView.setOnTouchListener(new android.view.View.OnTouchListener({
   onTouch: function (view, motionEvent) {
       console.log("DISABLED. onTouch event: Got    motionEvent.getAction() " + motionEvent.getAction() + ".");
       return true;
    }
}))

Upvotes: 13

Nikolay Tsonev
Nikolay Tsonev

Reputation: 1919

There is no easy way to disable ScrollView scrolling in NativeScript. In case you want to use ScrollView as a container, you can use ContentView for this purpose . However could you give me more info, why do you want to disable the scrolling.

Upvotes: 0

Related Questions