Xamarin.Forms中SwipeView触发TabbedPage滑动恢复问题咨询
Xamarin.Forms TabbedPage滑动异常问题解答
修复状态
你提到的这个TabbedPage禁用滑动后,被页面内SwipeView意外激活滑动的问题,在Xamarin.Forms 5.0.0.2012及更高版本中已经被官方修复。如果你的项目还在用旧版本,建议升级到对应版本就能解决问题。
临时解决方案(无法升级时)
如果暂时没办法升级版本,可以通过自定义Android渲染器彻底锁定TabbedPage的滑动功能:
- 第一步,在共享项目里创建自定义TabbedPage子类:
public class CustomTabbedPage : TabbedPage { }
- 第二步,在Android项目中实现自定义渲染器:
[assembly: ExportRenderer(typeof(CustomTabbedPage), typeof(CustomTabbedPageRenderer))] namespace YourAppNamespace.Droid.Renderers { public class CustomTabbedPageRenderer : TabbedPageRenderer { public CustomTabbedPageRenderer(Context context) : base(context) { } protected override void OnElementChanged(ElementChangedEventArgs<TabbedPage> e) { base.OnElementChanged(e); if (ViewPager != null) { // 强制关闭ViewPager的滑动能力 ViewPager.Enabled = false; } } } }
- 第三步,把XAML里原有的
TabbedPage替换成自定义的CustomTabbedPage,同时保留android:TabbedPage.IsSwipePagingEnabled="False"的设置即可。
另外,也可以在渲染器里直接拦截触摸事件,彻底阻止滑动手势:
public override bool OnTouchEvent(MotionEvent e) { // 拦截所有触摸滑动事件,不让标签页切换触发 return true; } public override bool OnInterceptTouchEvent(MotionEvent e) { // 拦截触摸事件,避免ViewPager处理滑动逻辑 return true; }
内容的提问来源于stack exchange,提问作者Marcel Delhaye
相关产品推荐
相关产品推荐

