Nativescript:如何以编程方式禁用/启用 ScrollView 滚动?
Nativescript: how to programmatically disable / enable ScrollView scrolling?
有没有办法以编程方式 disable/enable ScrollView 在 NativeScript 中滚动?
在 NativeScript 中没有简单的方法来禁用 ScrollView 滚动。如果您想使用 ScrollView 作为容器,您可以为此目的使用 ContentView 。但是你能给我更多信息吗,你为什么要禁用滚动。
好的,我找到了如何做到这一点。在 iOS:
上实际上很容易
var scrollView = page.getViewById('YOUR_VIEW_ID')
scrollView.ios.scrollEnabled = false // to disable
scrollView.ios.scrollEnabled = true // to enable back
Android:
同样对于我的特殊情况,我需要禁用滚动视图的滚动,但在其中拖放子视图。在子视图开始拖动(平移)事件时,我们通过以下方式防止滚动视图中的触摸事件拦截:
scrollView._nativeView.requestDisallowInterceptTouchEvent(true)
并通过以下方式在停止拖动(平移)子视图事件时再次启用它们:
scrollView._nativeView.requestDisallowInterceptTouchEvent(false)
如果您有其他情况并且只想禁用滚动视图滚动,您可以使用类似这样的东西(对于 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;
}
}))
Angular 2 版本:
在你的html中:
<ScrollView #scrollView >
...
</ScrollView>
在您的控制器中:
@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;
}
}
使用这个
this.scrollview.isUserInteractionEnabled=false;
或这个
this.scrollView.nativeElement).android.getParent().requestDisallowInterceptTouchEvent(false);
对于android
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.
如果有人正在寻找这个,您可以在 ScrollView
元素中将 isUserInteractionEnabled
设置为 false
,这将禁用用户滚动(您仍然可以通过编程方式进行)。
https://github.com/NativeScript/NativeScript/issues/2892#issuecomment-253536941
有没有办法以编程方式 disable/enable ScrollView 在 NativeScript 中滚动?
在 NativeScript 中没有简单的方法来禁用 ScrollView 滚动。如果您想使用 ScrollView 作为容器,您可以为此目的使用 ContentView 。但是你能给我更多信息吗,你为什么要禁用滚动。
好的,我找到了如何做到这一点。在 iOS:
上实际上很容易var scrollView = page.getViewById('YOUR_VIEW_ID')
scrollView.ios.scrollEnabled = false // to disable
scrollView.ios.scrollEnabled = true // to enable back
Android:
同样对于我的特殊情况,我需要禁用滚动视图的滚动,但在其中拖放子视图。在子视图开始拖动(平移)事件时,我们通过以下方式防止滚动视图中的触摸事件拦截:
scrollView._nativeView.requestDisallowInterceptTouchEvent(true)
并通过以下方式在停止拖动(平移)子视图事件时再次启用它们:
scrollView._nativeView.requestDisallowInterceptTouchEvent(false)
如果您有其他情况并且只想禁用滚动视图滚动,您可以使用类似这样的东西(对于 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;
}
}))
Angular 2 版本:
在你的html中:
<ScrollView #scrollView >
...
</ScrollView>
在您的控制器中:
@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;
}
}
使用这个
this.scrollview.isUserInteractionEnabled=false;
或这个
this.scrollView.nativeElement).android.getParent().requestDisallowInterceptTouchEvent(false);
对于android
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.
如果有人正在寻找这个,您可以在 ScrollView
元素中将 isUserInteractionEnabled
设置为 false
,这将禁用用户滚动(您仍然可以通过编程方式进行)。
https://github.com/NativeScript/NativeScript/issues/2892#issuecomment-253536941