Xamarin表单 - Webview未显示

时间:2015-12-17 09:01:38

标签: c# xamarin xamarin.forms xamarin-studio

我正在开发一个小型的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 }
            };
        }
    }
}

如果有人能帮助我,那就太好了。

3 个答案:

答案 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,不确定为什么仍被阻止。