2015-07-23 21 views
5

ho pagina web definita nella libreria di base, come vista da riempire tutto lo schermo:Ridimensiona WebView definito nella libreria Xamarin.Forms core sul caso Ruota schermo

Content = new WebView 
{ 
    VerticalOptions = LayoutOptions.FillAndExpand, 
    HorizontalOptions = LayoutOptions.FillAndExpand, 
    Source = "https://google.com", 
}; 

Purtroppo sullo schermo ruotare non è ridimensionata (vedi sotto):

enter image description here enter image description here

Come posso fare in modo che lo schermo è ridimensionata in rotazione dello schermo.

+0

Quale piattaforma sono in esecuzione e collaudo su? Hai provato su altre piattaforme per vedere se esibiscono lo stesso comportamento? Queste domande ci aiuteranno a ridurlo a un problema di implementazione della piattaforma rispetto a un problema di implementazione principale. –

risposta

5

Se è iOS, quindi fare un WebView renderer (http://developer.xamarin.com/guides/cross-platform/xamarin-forms/custom-renderer/):

protected override void OnElementChanged (VisualElementChangedEventArgs e) 
{ 
    base.OnElementChanged(e); 

    AutoresizingMask = UIViewAutoresizing.FlexibleDimensions; 
    ScalesPageToFit = true; 
} 

public override void LayoutSubviews() 
{ 
    base.LayoutSubviews(); 

    NativeView.Bounds = UIKit.UIScreen.MainScreen.Bounds; 
} 
+0

non solo per ios, serve per Android e Windows Phone. E soluzioni di code lib? Posso gestire la rotazione dello schermo lì? –

+0

Hai esattamente lo stesso problema su altre piattaforme?Puoi dare qualche screenshot? Sono abbastanza sicuro che lo screenshot provenga da iOS (rettangolo nero). Se utilizzi Renderer per la versione iOS, Android e Windows non saranno interessati. –

2

È necessario lavorare con WebView utilizzando Xamarin.forms.

Working with WebView in Xamarin.Forms

xamarin-forms-samples/WorkingWithWebview ha esempi per ogni piattaforma.

Questo collegamento su Handling Rotation fornisce tutti i dettagli necessari per Android. L'altra risposta ha coperto iOS.

Responding To Orientation Changes In Xamarin Forms un altro grande collegamento

Customizing Controls for Each Platform utilizzare queste premesse è possibile gestire la rotazione dello schermo per ogni piattaforma separata all'interno del un'unica app.

Handling Runtime Changes mostra come gestire la rotazione dello schermo. È necessario scorrere la pagina verso il basso.

Un buon collegamento sulla gestione di Windows Phone, The two ways to handle orientation in your Windows 8.1 app.

Un altro collegamento utile Fix IE 10 on Windows Phone 8 Viewport.

Questo è un collegamento interessante su Managing screen orientation da mozilla. È sperimentale, ma interessante.

0

ho implementato il renderer personalizzato e ha aggiunto la linea "webView.AutoresizingMask = UIViewAutoresizing.FlexibleDimensions;" ma non funziona per me. Quindi, ho risolto questo problema con una soluzione non molto elegante (ricaricare il componente WebView quando cambia l'orientamento del dispositivo).

Nel mio XAML:

<StackLayout Padding="0" > 
     <WebView x:Name="viewJupyter" VerticalOptions="FillAndExpand" HorizontalOptions="FillAndExpand" /> 
    </StackLayout> 

E il mio codice dietro classe:

public partial class ServiceChart : ContentPage 
{ 
    private int _rotateView; 
    public ServiceChart(string title, string url) 
    { 
     Title = title; 
     InitializeComponent(); 

     var urlPage = new UrlWebViewSource 
     { 
      Url = url 
     }; 
     viewJupyter.Source = urlPage; 

     if (Device.OS == TargetPlatform.iOS) 
     { 
      SizeChanged += (sender, arg) => 
      { 
       if (_rotateView != 0) 
       { 
        var lalala = viewJupyter; 
        InitializeComponent(); 
        viewJupyter.Source = (lalala.Source as UrlWebViewSource).Url; 
       } 
       _rotateView++; 
      }; 
     } 
    } 
}