【发布时间】:2014-08-15 15:11:35
【问题描述】:
我对 Xamarin 和 iOS 还很陌生,我正在整理一个小型 POC 应用来学习。
该应用程序使用一个包含 UIWebView 的视图。我打算将本地 Web 文件加载到其中,然后使用 JavaScript 和 C#(JS 桥)混合操作这些文件,但 UIWebView 无法正常运行。它根本不加载页面。如果我卸载该应用程序,然后重新安装并运行它,它通常会成功加载网页,但在随后的会话中,网页通常不会加载,将网页视图保留为白色空白区域。只是为了确保我尝试加载众所周知的网页,例如xamarin.com 或apple.com。同样,我第一次运行它时页面会加载,但在随后的会话中它们不会。物理设备(iPhone 5)和模拟器上的行为是相同的。
是否需要考虑如何使用 UIWebView?托管它的 ViewController 是 SlideoutNavigationController 的子视图。
我对 UIWebView 的经验很少,因此非常感谢任何提示。
谢谢
编辑: 加载网页视图的代码:
WebView.LoadFinished += (object sender, EventArgs e) =>
{
UIApplication.SharedApplication.NetworkActivityIndicatorVisible = false; System.Diagnostics.Debug.WriteLine("Web page was loaded");
};
WebView.LoadError += (object sender, UIWebErrorArgs e) =>
{
UIApplication.SharedApplication.NetworkActivityIndicatorVisible = false; System.Diagnostics.Debug.WriteLine(e);
};
WebView.ShouldStartLoad += (UIWebView webView, NSUrlRequest request, UIWebViewNavigationType navigationType) =>
{
return true;
};
WebView.Layer.BorderColor = UIColor.Red.CGColor;
WebView.Layer.BorderWidth = 10;
WebView.LoadRequest(new NSUrlRequest(new NSUrl("http://www.apple.com")));
UIApplication.SharedApplication.NetworkActivityIndicatorVisible = true;
WebView.ScalesPageToFit = true;
注意:ShouldStartLoad 事件处理程序是唯一被调用的。
这是页面加载(失败)后 iOS 模拟器的样子:
【问题讨论】:
-
当您看到白屏时,您确定
UIWebView存在吗?尝试在UIWebView周围绘制红色边框以确保确定。请向我们展示您加载网页的代码。 -
webView.Layer.BorderColor = UIColor.Red.CGColor;webView.Layer.BorderWidth = 10; -
我添加了代码和屏幕截图。如您所见,Web 视图确实可见。我还尝试添加自定义委托,以查看调用了哪些方法。但是,没有一个被覆盖的方法被调用。另外,谁能告诉我底部半透明表面是什么?我仔细检查了 UI 设计器,没有为这个 VC 设置底栏。
-
您是否实现了
ShouldStartLoad委托?查看以下答案(如果您想打开UIWebView中的每个网页,您可以在处理程序中简单地返回 true)stackoverflow.com/questions/21851412/… -
好的,我尝试为
ShouldStartLoad实现一个事件处理程序,它只返回true。处理程序被正确调用,但页面仍然没有加载,并且没有其他事件处理程序被调用。
标签: uiwebview xamarin.ios