我正在开发一个小型的Xamarin.Forms webview应用程序。这是对之前回答的问题xamarin-forms-making-webview-go-back
的跟进问题所以我有一个工具栏和一个后退按钮实现和工作。但是当我在模拟器已经打开的情况下运行程序时(即使用Genymotion),程序会运行并显示工具栏和后退按钮......但不会显示webview。
但是这是一件奇怪的事情,有时我在模拟器处于睡眠模式时运行程序,然后将程序切换回程序就可以完美运行。此外,当我在iOS上测试它时,它只是显示工具栏而没有webview!更常见的是,模拟器不会显示webView。我也在我的Android设备上测试了这个,同样的事情发生了,它会显示工具栏但不显示webview。
我知道Abit令人困惑,但任何人都可以帮我解决这个问题。
我将在下面附上我的代码:
App.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Xamarin.Forms;
namespace WebView_form
{
public class App : Application
{
public App()
{
//const string URL = "http://www.google.com";
MainPage = new NavigationPage(new WebPage());
}
protected override void OnStart()
{
// Handle when your app starts
}
protected override void OnSleep()
{
// Handle when your app sleeps
}
protected override void OnResume()
{
// Handle when your app resumes
}
}
}
WebPage.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection.Emit;
using System.Text;
using Xamarin.Forms;
namespace WebView_form
{
public class WebPage : ContentPage
{
private WebView webView;
public WebPage()
{
webView = new WebView
{
Source = "https://www.google.com"
};
// toolbar
ToolbarItems.Add(new ToolbarItem("Back", null, () =>
{
webView.GoBack();
}));
Content = new StackLayout
{
Children = { webView }
};
}
}
}
如果有人能帮助我,那就太好了。
答案 0 :(得分:16)
将VerticalOptions
设置为FillAndExpand
,如果HorizontalOptions
无法正常工作,请执行相同操作。
可能WebView
的高度为零,因为当布局发生时,视图仍为空。
因此,像这样更改WebPage.cs中的代码;
// ... Other code
public WebPage()
{
webView = new WebView
{
Source = "https://www.google.com",
VerticalOptions = LayoutOptions.FillAndExpand,
HorizontalOptions = LayoutOptions.FillAndExpand
};
// toolbar
ToolbarItems.Add(new ToolbarItem("Back", null, () =>
{
webView.GoBack();
}));
Content = new StackLayout
{
Children = { webView }
};
}
// ... Other code
答案 1 :(得分:1)
要考虑的另一件事:如果您正在响应WebView.Navigating事件,请确保如果加载的页面是WevView.Source,则不要将其args.Cancel设置为true。 WebView.Navigating的iOS实现在加载WebView.Source但Android实现没有加载时触发。如果在有问题的页面是WebView.Source时将args.Cancel设置为true,则WebView将为空白。
答案 2 :(得分:0)
将此设置到您的Info.plist中以绕过App Transport Security检查。访问https://developer.apple.com/documentation/bundleresources/information_property_list/nsapptransportsecurity了解更多信息。
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
注意:我的URL已经是HTTPS,不确定为什么仍被阻止。