繁体   English   中英

如何在Xamarin.iOS中向后滑动?

[英]How to swipe back in Xamarin.iOS?

我的共享Xamarin项目中有一个带有WebView的ContentPage。

为了在WebView中启用Android的后退按钮,我使用了以下代码:

protected override bool OnBackButtonPressed()
{
      _myWebView.GoBack();
      return true;
}

众所周知,iOS没有后退按钮。 我想启用向左滑动以导航到上一个Webview页面。

最简单的方法是什么?

我建议为WebView实现自定义渲染器,并将手势识别器附加到基础UIWebView 这就是在Xamarin Forms中实现iOS版WebViewRenderer的方式。

Xamarin Forms WebView实际上是iOS上的UIWebView 因此,您可以在渲染器中从以下答案中实现Swift代码: https : //stackoverflow.com/a/32012660/6192895 将此Swift代码转换为C#相当简单,但这也是一个潜在的解决方案:

基本解决方案

public class SwipeWebViewRenderer : WebViewRenderer
{
    protected override void OnElementChanged(VisualElementChangedEventArgs e)
    {
        base.OnElementChanged(e);

        var view = NativeView as UIWebView;
        var swipeBackRecognizer = new UISwipeGestureRecognizer(HandleSwipeBack);
        swipeBackRecognizer.Direction = UISwipeGestureRecognizerDirection.Right;

        view.AddGestureRecognizer(swipeBackRecognizer);
    }

    void HandleSwipeBack()
    {
        (Element as WebView).GoBack();
    }
}

这个解决方案是相当基本的,它只是执行GoBack()操作,而没有像普通的Safari浏览器一样实际显示页面的滑动。 因此,如果需要的话,您可能必须添加更多代码。

过渡中

您可以为此使用CoreAnimation。 将此用作您的HandleSwipeBack方法:

void HandleSwipeBack()
{
    CATransition animation = new CATransition();
    animation.Type = CAAnimation.TransitionPush;
    animation.Subtype = CAAnimation.TransitionFromLeft;
    animation.Duration = 0.50;
    animation.TimingFunction = CAMediaTimingFunction.FromName(CAMediaTimingFunction.EaseInEaseOut);

    (NativeView as UIWebView).Layer.AddAnimation(animation, CALayer.Transition);
    (Element as WebView).GoBack();
}

这不会使您获得与Safari浏览器完全相同的行为,例如,如果您停止半滑动,它将不会取消动画。 可以这样做,但是需要更多代码。

额外的信息

您也可以从SwipeGestureRecognizer的请求请求中获得一些启发, 该请求未包含在Xamarin Forms中,因为缺少单元测试和UI测试。

不幸的是,目前默认的Xamarin Forms GestureRecognizers仅限于Tap,Pinch和Pan。

你可以尝试以下

NavigationPage.SetBackButtonTitle (this, "")

或者,您可以添加工具栏项,然后尝试类似的操作

ToolbarItems.Add(new ToolbarItem("Back", "BackIcon.png", () => { _webview.GoBack(); }));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM