.Net Maui WebView ведет себя по-разному для iOS и Android

У меня есть страница .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 отображаются так, как ожидалось.

Спасибо за любые подсказки

Если у вас есть контроль над веб-сайтом, вы можете добавить эту строку «<meta name = "viewport" content = "width=device-width, Initial-scale=1">», это может решить вашу проблему. Если у вас нет доступа к веб-сайту, вы можете создать обработчик для пользовательского веб-представления и добавить эту строку на загружаемый веб-сайт.

alexgavru 01.03.2024 22:28

Спасибо. У меня нет контроля над веб-сайтом, хотя он, похоже, связан с веб-сайтом, поскольку другие сайты выглядят нормально в элементе управления веб-просмотром. Мне кажется странным, что он отлично работает через браузер на Android и через симулятор на iOS. Попробую разобраться, как сделать то, что вы предлагаете! У Вас случайно нет примера?!

Ade 02.03.2024 12:32

Я только что нашел еще один пост с инструкциями по этому поводу при поиске по вашему ответу — большое спасибо!

Ade 02.03.2024 12:41

Наконец, мне удалось обойти эту проблему, создав собственный WebView и добавив следующий код: Microsoft.Maui.Handlers.WebViewHandler.Mapper.AppendToMappin‌​g("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);

Ade 03.03.2024 18:21
0
4
625
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Ну, согласно вашему комментарию, в качестве ответа:

Эту проблему можно решить, настроив 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
        }

})

Получите официальный документ: Настройте конкретный экземпляр элемента управления для получения более подробной информации.

Другие вопросы по теме