Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在Xamarin.iOS中刷回?_C#_Ios_Xamarin - Fatal编程技术网

C# 如何在Xamarin.iOS中刷回?

C# 如何在Xamarin.iOS中刷回?,c#,ios,xamarin,C#,Ios,Xamarin,我在共享的Xamarin项目中有一个带有WebView的ContentPage 为了在WebView中启用Android的后退按钮,我使用了以下代码: protected override bool OnBackButtonPressed() { _myWebView.GoBack(); return true; } 众所周知,iOS没有后退按钮。我想启用向左滑动,以便导航到上一个Webview页面 最简单的方法是什么?你能试试下面的方法吗 NavigationPage

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

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

protected override bool OnBackButtonPressed()
{
      _myWebView.GoBack();
      return true;
}
众所周知,iOS没有后退按钮。我想启用向左滑动,以便导航到上一个Webview页面


最简单的方法是什么?

你能试试下面的方法吗

NavigationPage.SetBackButton点击此按钮

或者,您也可以添加工具栏项,然后尝试以下操作


添加新的ToolbarItemBack,BackIcon.png,=>{{u webview.GoBack;}

我建议为WebView实现自定义渲染器,并将手势识别器附加到底层UIWebView。for iOS以Xamarin形式实现

Xamarin表单WebView实际上是iOS上的UIWebView。因此,您可以在渲染器中根据以下答案实现Swift代码:。将此Swift代码转换为C非常简单,但这也是一个潜在的解决方案:

基本溶液

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

过渡

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

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

额外信息

您还可以从中获得一些启发,因为单元测试和UI测试缺失,所以Xamarin表单中没有包含这些内容


不幸的是,默认的Xamarin表单手势识别器目前仅限于轻敲、捏和平移。

谢谢您,它工作正常!他们有没有实现软转换的方法?我已经用一个转换示例更新了答案。如果这是你需要的,一定要接受答案。
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();
    }
}
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();
}