0

Xamarin.Forms プロジェクトで WebView のカスタム レンダラーを作成しました。WebView は Android でうまく機能します。残念ながら、iOS では、デバイスを回転させると、Web ページ (任意の Web ページ) が WebView の新しいサイズに正しく調整されません。組み込みの WebView for Forms を使用すると、回転時にページのサイズが正しく変更されます。

カスタム レンダラーのどこが間違っていますか?

以下は、私のカスタム レンダラーの簡素化されたバージョンです (問題は引き続き発生します)。

using Xamarin.Forms.Platform.iOS;
using Xamarin.Forms;
using UIKit;
using Foundation;

[assembly: ExportRenderer(typeof(WebView), typeof(MyProject.iOS.WebViewRenderer))]
namespace MyProject.iOS {
    public class WebViewRenderer : ViewRenderer<WebView, UIWebView> {
        protected override void OnElementChanged(ElementChangedEventArgs<WebView> e) {
            if (Control == null) {
                var webView = new UIWebView(Frame);
                webView.AutoresizingMask = UIViewAutoresizing.All;
                SetNativeControl(webView);
                webView.LoadRequest(new NSUrlRequest(new NSUrl("http://cnn.com")));
            }
        }
    }
}
4

2 に答える 2

0

回転の問題を修正するには、UIWebView を作成するときに NativeView.Bounds を使用する必要があります。

[assembly: ExportRenderer(typeof(CustomWebView), typeof(CustomWebViewRenderer))]
namespaceMobile.App.iOS
{
    public class CustomWebViewRenderer : ViewRenderer<CustomWebView, UIWebView>
    {      
        protected override void OnElementChanged(ElementChangedEventArgs<CustomWebView> e)
        {
            base.OnElementChanged(e);

            if (Control == null)
            {
                var webView = new UIWebView(NativeView.Bounds);

                webView.ShouldStartLoad += HandleShouldStartLoad;
                webView.AutoresizingMask = UIViewAutoresizing.All;
                webView.ScalesPageToFit = true;                
                SetNativeControl(webView);

                webView.LoadRequest(new NSUrlRequest(new NSUrl(Element.Url)));
            }
        }

        public override SizeRequest GetDesiredSize(double widthConstraint, double heightConstraint)
        {
            return new SizeRequest(Size.Zero, Size.Zero);
        }
    }
}
于 2016-09-27T18:57:22.097 に答える