2017-05-04 74 views
0

我的共享Xamarin項目中有一個WebView的ContentPage。如何刷回Xamarin.iOS?

要啓用的WebView內Android的後退按鈕,我用下面的代碼:

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

大家都知道,iOS不具備後退按鈕。我想要啓用向左滑動以導航到先前的Webview頁面。

什麼是最簡單的方法或方法?

回答

1

我會建議實施的自定義呈現WebView並將手勢識別器附加到基礎UIWebView。用於iOS的This is how the WebViewRenderer在Xamarin Forms中實現。

Xamarin表格WebView實際上是iOS上的UIWebView。因此,您可以在渲染器中根據以下答案實施Swift代碼:https://stackoverflow.com/a/32012660/6192895。這斯威夫特代碼轉換爲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瀏覽器,因爲如果停止刷卡中途例如,它不會取消動畫。有可能這樣做,但它需要更多的代碼。

的額外信息

您可能還能夠從this Pull Request for a SwipeGestureRecognizer,因爲單元測試和UI測試不翼而飛這是不包括在Xamarin形式得出一些啓示。

不幸的是,默認的Xamarin Forms手勢識別器目前僅限於點擊,捏和平移。

+0

到目前爲止,謝謝你,它工作正常!他們有什麼辦法實施軟轉型? – localhorst27

+0

我已經用一個過渡示例更新了答案。如果這是你需要的,請務必接受答案。 –

0

你可以試試下面的

NavigationPage.SetBackButtonTitle (this, "")

或者你也可以添加工具欄項目,然後嘗試這樣的事情

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