如何在Xamarin.iOS中滑回?

时间:2017-05-04 10:04:36

标签: c# ios xamarin

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

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

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

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

最简单的方式或方法是什么?

2 个答案:

答案 0 :(得分:1)

我建议为%实现自定义渲染器,并将手势识别器附加到基础wildcard。适用于iOS的This is how the WebViewRenderer是在Xamarin Forms中实现的。

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

基本解决方案

WebView

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

<强>转换

您可以使用CoreAnimation。将此用作UIWebView方法:

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();
    }
}

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

额外信息

您也可以从this Pull Request for a SwipeGestureRecognizer中汲取灵感,而这些灵感并未包含在Xamarin Forms中,因为缺少单元测试和UI测试。

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

答案 1 :(得分:0)

您可以尝试以下

NavigationPage.SetBackButtonTitle (this, "")

或者您可以添加工具栏项,然后尝试这样的

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