Проблема возникает на Android.
Я реализовал пользовательский рендерер для WebView
, чтобы получить возможность изменения размера базы запросов высоты по его содержимому.
Я взял это из сообщения на форуме xamarin.
[assembly: ExportRenderer(typeof(AutoHeightWebView), typeof(AutoHeightWebViewRenderer))]
namespace MyProject.Droid.Renderers
{
public class AutoHeightWebViewRenderer : WebViewRenderer
{
public AutoHeightWebViewRenderer(Context context): base(context) {}
protected override void OnElementChanged(ElementChangedEventArgs<Xamarin.Forms.WebView> e)
{
base.OnElementChanged(e);
if (e.NewElement is AutoHeightWebView webViewControl)
{
if (e.OldElement == null)
{
Control.SetWebViewClient(new ExtendedWebViewClient(webViewControl));
}
}
}
class ExtendedWebViewClient : Android.Webkit.WebViewClient
{
private readonly AutoHeightWebView _control;
public ExtendedWebViewClient(AutoHeightWebView control)
{
_control = control;
}
public override async void OnPageFinished(Android.Webkit.WebView view, string url)
{
if (_control != null)
{
int i = 10;
while (view.ContentHeight == 0 && i-- > 0) // wait here till content is rendered
{
await System.Threading.Tasks.Task.Delay(100);
}
_control.HeightRequest = view.ContentHeight;
}
base.OnPageFinished(view, url);
}
}
}
}
Исходя из определенной логики c, я изменяю источник WebView
и использую пользовательский рендер для изменения размера представления.
Это работает, когда размер увеличивается, но не когда размер содержимого меньше, чем предыдущий ...
Будет понятнее, если я установлю источник WebView
в файл html, который Высота 200px и измените его на html файл, который составляет 1000px, он отлично работает, и я могу видеть все содержимое. НО, если я попытаюсь go вернуться к моему файлу размером 200px html, я получу пустое пространство размером 800px внизу, так как содержимое на view.ContentHeight
не изменится и сохранит значение 1000px.
Я следил за этой проблемой / темой и не нашел решения, чтобы решить эту проблему: https://github.com/xamarin/Xamarin.Forms/issues/1711
Я видел много тем на Android говоря, что нам нужно воссоздать веб-просмотр. Есть ли другое решение?