У меня есть страница .Net MAUI, которая использует самый простой код для WebView, а именно:
<StackLayout Margin = "10">
<WebView x:Name = "wv" HorizontalOptions = "FillAndExpand" VerticalOptions = "CenterAndExpand" MinimumHeightRequest = "1000" MinimumWidthRequest = "20" />
</StackLayout>В коде есть только оператор wv.source = url.
Это отлично отображается в симуляторе iOS и на iPhone, то есть точно так же, как если бы я ввел URL-адрес в Safari на телефоне.
На Android это отображается так, как будто веб-сайт не знает размер целевого устройства, то есть телефон отображает окно на странице размером с настольный компьютер, но если я ввожу URL-адрес в браузер Android Chrome, все работает нормально.
Что мне не хватает?
wv.height и wv.width показывают -1 на Android и iOS. DeviceDisplay.Current.MainDisplayInfo.Width и Height отображаются так, как ожидалось.
Спасибо за любые подсказки
Спасибо. У меня нет контроля над веб-сайтом, хотя он, похоже, связан с веб-сайтом, поскольку другие сайты выглядят нормально в элементе управления веб-просмотром. Мне кажется странным, что он отлично работает через браузер на Android и через симулятор на iOS. Попробую разобраться, как сделать то, что вы предлагаете! У Вас случайно нет примера?!
Я только что нашел еще один пост с инструкциями по этому поводу при поиске по вашему ответу — большое спасибо!
Наконец, мне удалось обойти эту проблему, создав собственный WebView и добавив следующий код: Microsoft.Maui.Handlers.WebViewHandler.Mapper.AppendToMapping("MyCustomization", (Handler, View) => { if (View is CustomWebView) { #if ANDROID Handler.PlatformView.Settings.UseWideViewPort = true; Handler.PlatformView.Settings.LoadWithOverviewMode = true; Handler.PlatformView.Settings.BuiltInZoomControls = true; Handler.PlatformView.Settings.SetSupportZoom (true);
Ну, согласно вашему комментарию, в качестве ответа:
Эту проблему можно решить, настроив WebView с помощью обработчиков для вызова кода, специфичного для платформы.
Microsoft.Maui.Handlers.WebViewHandler.Mapper.AppendToMapping
("MyCustomization", (Handler, View) => {
if (View is CustomWebView)
{
#if ANDROID
Handler.PlatformView.Settings.UseWideViewPort = true;
Handler.PlatformView.Settings.LoadWithOverviewMode = true;
Handler.PlatformView.Settings.BuiltInZoomControls = true;
Handler.PlatformView.Settings.SetSupportZoom (true);
#endif
}
})
Получите официальный документ: Настройте конкретный экземпляр элемента управления для получения более подробной информации.
Если у вас есть контроль над веб-сайтом, вы можете добавить эту строку «<meta name = "viewport" content = "width=device-width, Initial-scale=1">», это может решить вашу проблему. Если у вас нет доступа к веб-сайту, вы можете создать обработчик для пользовательского веб-представления и добавить эту строку на загружаемый веб-сайт.