Проблемы с интерфейсом при горизонтальном вращении устройства - PullRequest
0 голосов
/ 29 декабря 2018

Интерфейс моего приложения разделен на заголовок (это веб-просмотр) и абсолютный контент, который, помимо прочего, содержит второй веб-просмотр.

В вертикальной ориентации он работает и выглядит идеально.

Но когда я поворачиваю устройство горизонтально, жатка перестает измерять 70 и измеряет что-то вроде 30 ... Жатка уменьшает высоту, хотя имеет фиксированную высоту.

Почему это происходит?Любое решение?

<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
         xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
         xmlns:local="clr-namespace:PruebaHeight"
         x:Class="PruebaHeight.MainPage">
<ContentPage.Content>
    <StackLayout Spacing="0">

        <WebView x:Name="webview_header" HorizontalOptions="FillAndExpand" HeightRequest="70" BackgroundColor="Red"/>

        <AbsoluteLayout HorizontalOptions="FillAndExpand" VerticalOptions="FillAndExpand" BackgroundColor="Black">
            <!-- other things -->
            <ScrollView AbsoluteLayout.LayoutBounds="0,0,1,1" AbsoluteLayout.LayoutFlags="All" BackgroundColor="Green">
                <AbsoluteLayout HorizontalOptions="FillAndExpand" VerticalOptions="FillAndExpand" Padding="0" BackgroundColor="Purple">
                    <WebView x:Name="webview" AbsoluteLayout.LayoutBounds="0,0,1,1" AbsoluteLayout.LayoutFlags="All" BackgroundColor="Blue" />
                </AbsoluteLayout>
            </ScrollView>
        </AbsoluteLayout>

    </StackLayout>
</ContentPage.Content>

1 Ответ

0 голосов
/ 31 декабря 2018

Вы можете попробовать настроить вид, подобный следующему коду.

XamWebView.cs

public class XamWebView: WebView
{

}

Затем используйте его в своем коде.

var webview= new XamWebView();

webview.HorizontalOptions = LayoutOptions.Fill;
webview.VerticalOptions = LayoutOptions.StartAndExpand;

webview.WidthRequest = 70;
webview.HeightRequest = 70;

webview.Source = "https://www.google.com/";

СозданиеПользовательский рендерер на Android (вы можете получить значение heightrequest при запуске)

using WebView = Android.Webkit.WebView;
[assembly: ExportRenderer (typeof(XamWebView), typeof(XamWebViewRenderer))]
namespace Core.Droid
{

public class XamWebViewRenderer : WebViewRenderer
{
    static XamWebView _xwebView = null;
    WebView _webView;

    public XamWebViewRenderer(Context context) : base(context)
    {

    }
    class XamWebViewClient : Android.Webkit.WebViewClient
    {
        public override async void OnPageFinished(WebView view, string url)
        {
            if (_xwebView != null)
            {
                int i = 10;
                while (view.ContentHeight == 0 && i-- > 0)
                    await System.Threading.Tasks.Task.Delay(100);
                _xwebView.HeightRequest = view.ContentHeight;
            }
        }
    }
    protected override void OnElementChanged(ElementChangedEventArgs<Xamarin.Forms.WebView> e)
    {
        base.OnElementChanged(e);
        _xwebView = e.NewElement as XamWebView;
        _webView = Control;

        if (e.OldElement == null)
        {
            _webView.SetWebViewClient(new XamWebViewClient());
        }

    }
}

}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...