[英]Xamarin WebView usually shows nothing
public partial class Page : ContentPage
{
public Page(string filename)
{
if(...
{
WebView view = new WebView
{
Source = "http://xamarin.com"
//Source = "http://www.google.com"
/*Source = new HtmlWebViewSource
{
Html = @"<html><body>
<h1>Test Code</h1>
<p>The code is working.</p>
</body></html>"
}*/
};
Content = new StackLayout()
{
Children =
{
view
}
};
}
else ...
該頁面大部分時間顯示為空白。 在xamarin.com示例中,經過長時間的延遲,該頁面填充了我運行該頁面大約20%的時間。 Google和自定義測試根本不起作用。 自定義代碼是我要針對某些特定情況工作的內容,這些情況將更易於創建為Web代碼。
在其他情況下,我創建和添加的其他視圖組件也可以正常工作。 (按鈕,標簽等)
斷點並沒有顯示太多。 該關注列表毫無作用,無法告訴我任何事情。 通過逐步了解,我可以在各種測試用例中找到正確的代碼路徑,僅此而已。
在Xamarin Live Player(Android 6.0-API 23)的Android手機上進行了測試。 該代碼在Visual Studio 2015中。目標平台是Android和iOS。
相應的xaml頁沒有太多內容。
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="Project.Views.Page"
</ContentPage>
編輯:
AndroidManifext.xml具有INTERNET權限:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.Company.Project" android:versionCode="1" android:versionName="1.0">
<uses-sdk android:minSdkVersion="15" />
<uses-permission android:name="android.permission.INTERNET" />
<application android:label="Project.Android"></application>
</manifest>
該頁面大部分時間顯示為空白。 在xamarin.com示例中,經過長時間的延遲,該頁面填充了我運行該頁面大約20%的時間。 Google和自定義測試根本不起作用。 自定義代碼是我要針對某些特定情況工作的內容,這些情況將更易於創建為Web代碼。
我已經測試過並重現了問題。 僅當您在構造函數或OnAppearing
編程方式創建OnAppearing
時,才會發生這種情況。 我設置了斷點,發現webview的高度不會自動擴展(始終為0)。 我的猜測是,如果您在頁面的構造函數或OnAppearing
創建webview,則永遠不會根據其Web內容重新測量webview。
因此,有兩種解決方法:
在Xaml中使用webview:
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" ...> <WebView Source="http://xamarin.com"></WebView> </ContentPage>
舉一個HeightRequest
中的WebView OnNavigated
:
protected override void OnAppearing() { base.OnAppearing(); view = new WebView(); Content = new StackLayout { Children = { view } }; view.Navigated += View_Navigated; view.Source = "http://xamarin.com"; } private void View_Navigated(object sender, WebNavigatedEventArgs e) { (sender as WebView).HeightRequest = Height; }
更新:如果您將HtmlWebViewSource
用於HtmlWebViewSource
的Source。 View_Navigated
不會被觸發。 因此,在這樣的circumsance,您可以設置webview.HeightRequest
設置后明確webview.Source
:
view = new WebView();
Content = new StackLayout
{
Children = { view }
};
view.Navigated += View_Navigated;
//view.Source.BindingContextChanged += Source_BindingContextChanged;
//view.Source.PropertyChanged += Source_PropertyChanged;
HtmlWebViewSource mSource = new HtmlWebViewSource
{
Html = @"<html><body>
<h1>Test Code</h1>
<p>The code is working.</p>
</body></html>"
};
view.Source = mSource;
view.HeightRequest = 150;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.