*** In Shared code: public class WebViewPage : ContentPage { } ... await Navigation.PushAsync (new WebViewPage()); *** using System; using ViewRSS; using Xamarin.Forms; using ViewRSS.iOS; using Xamarin.Forms.Platform.iOS; using Foundation; using UIKit; using CoreGraphics; using System.Threading; using System.Threading.Tasks; [assembly: ExportRenderer (typeof (WebViewPage), typeof (WebViewPageRenderer))] namespace ViewRSS.iOS { public class WebViewPageRenderer : PageRenderer { UIWebView webView; LoadingOverlay loadingOverlay; public WebViewPageRenderer () { } public override void ViewDidAppear (bool animated) { base.ViewDidAppear (animated); App.Debug ("ViewDidAppear"); var url = new NSUrlRequest (new NSUrl (ItemsPage._item.Link), NSUrlRequestCachePolicy.UseProtocolCachePolicy, 15.0); webView.LoadRequest (url); } public override void ViewDidLoad () { base.ViewDidLoad (); App.Debug ("ViewDidLoad"); webView = new UIWebView (View.Bounds); webView.WeakDelegate = this; webView.ScalesPageToFit = true; View.AddSubview(webView); bool didStart = false; bool didFinish = false; loadingOverlay = new LoadingOverlay(webView.Bounds); webView.Add(loadingOverlay); UIApplication.SharedApplication.NetworkActivityIndicatorVisible = true; //When the web view is finished loading webView.LoadFinished += (object sender, EventArgs e) => { if (didFinish == false) { loadingOverlay.Hide(); UIApplication.SharedApplication.NetworkActivityIndicatorVisible = false; didStart = false; didFinish = true; } }; //If there is a load error webView.LoadError += (object sender, UIWebErrorArgs e) => { if (didFinish == false) { loadingOverlay.Hide(); UIApplication.SharedApplication.NetworkActivityIndicatorVisible = false; didStart = false; didFinish = true; } }; } } public class LoadingOverlay : UIView { // control declarations UIActivityIndicatorView activitySpinner; UILabel loadingLabel; public LoadingOverlay (CGRect frame) : base (frame) { // configurable bits BackgroundColor = UIColor.Black; Alpha = 0.75f; AutoresizingMask = UIViewAutoresizing.FlexibleDimensions; nfloat labelHeight = 22; nfloat labelWidth = Frame.Width - 20; // derive the center x and y nfloat centerX = Frame.Width / 2; nfloat centerY = Frame.Height / 2; // create the activity spinner, center it horizontall and put it 5 points above center x activitySpinner = new UIActivityIndicatorView(UIActivityIndicatorViewStyle.WhiteLarge); activitySpinner.Frame = new CGRect ( centerX - (activitySpinner.Frame.Width / 2) , centerY - activitySpinner.Frame.Height - 20 , activitySpinner.Frame.Width , activitySpinner.Frame.Height); activitySpinner.AutoresizingMask = UIViewAutoresizing.FlexibleMargins; AddSubview (activitySpinner); activitySpinner.StartAnimating (); // create and configure the "Loading Data" label loadingLabel = new UILabel(new CGRect ( centerX - (labelWidth / 2), centerY + 20 , labelWidth , labelHeight )); loadingLabel.BackgroundColor = UIColor.Clear; loadingLabel.TextColor = UIColor.White; loadingLabel.Text = "Loading Data..."; loadingLabel.TextAlignment = UITextAlignment.Center; loadingLabel.AutoresizingMask = UIViewAutoresizing.FlexibleMargins; AddSubview (loadingLabel); } /// <summary> /// Fades out the control and then removes it from the super view /// </summary> public void Hide () { UIView.Animate ( 0.5, // duration () => { Alpha = 0; }, () => { RemoveFromSuperview(); } ); } }; }