[英]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.