如何使用Xamarin.Forms修复用于iOS的WebView自定义呈现程序的旋转?

如何使用Xamarin.Forms修复用于iOS的WebView自定义呈现程序的旋转?,webview,xamarin.ios,rotation,xamarin.forms,custom-renderer,Webview,Xamarin.ios,Rotation,Xamarin.forms,Custom Renderer,我已经在Xamarin.Forms项目中为WebView创建了自定义渲染器。WebView在Android上运行得非常好。不幸的是,在iOS上,当设备旋转时,网页(任何网页)无法正确地调整到WebView的新维度。如果我对表单使用内置WebView,页面在旋转时会正确调整大小 我的自定义渲染器有什么问题 下面是自定义渲染器的精简版本(问题仍然存在): 使用Xamarin.Forms.Platform.iOS; 使用Xamarin.Forms; 使用UIKit; 使用基础; [程序集:Export

我已经在Xamarin.Forms项目中为WebView创建了自定义渲染器。WebView在Android上运行得非常好。不幸的是,在iOS上,当设备旋转时,网页(任何网页)无法正确地调整到WebView的新维度。如果我对表单使用内置WebView,页面在旋转时会正确调整大小

我的自定义渲染器有什么问题

下面是自定义渲染器的精简版本(问题仍然存在):

使用Xamarin.Forms.Platform.iOS;
使用Xamarin.Forms;
使用UIKit;
使用基础;
[程序集:ExportRenderer(typeof(WebView)、typeof(MyProject.iOS.WebViewRenderer))]
名称空间MyProject.iOS{
公共类WebViewRenderer:ViewRenderer{
受保护的覆盖无效OnElementChanged(ElementChangedEventArgs e){
if(Control==null){
var webView=新的UIWebView(框架);
webView.AutoresizingMask=ui视图autoresizing.All;
SetNativeControl(网络视图);
LoadRequest(新的NSUrlRequest(新的NSUrl)(“http://cnn.com")));
}
}
}
}

要解决此问题,请将以下内容添加到自定义渲染器:

public override SizeRequest GetDesiredSize(double widthConstraint, double heightConstraint) {
    return new SizeRequest(Size.Zero, Size.Zero);
}

要解决此问题,请将以下内容添加到自定义渲染器:

public override SizeRequest GetDesiredSize(double widthConstraint, double heightConstraint) {
    return new SizeRequest(Size.Zero, Size.Zero);
}

要解决旋转问题,需要在创建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);
        }
    }
}
[程序集:ExportRenderer(typeof(CustomWebView)、typeof(CustomWebViewRenderer))]
namespaceMobile.App.iOS
{
公共类CustomWebViewRenderer:ViewRenderer
{      
受保护的覆盖无效OnElementChanged(ElementChangedEventArgs e)
{
基础。一个要素发生变化(e);
if(Control==null)
{
var webView=newuiwebview(NativeView.Bounds);
webView.shouldstartoad+=无手柄shouldstartoad;
webView.AutoresizingMask=ui视图autoresizing.All;
webView.ScalesPageToFit=true;
SetNativeControl(网络视图);
LoadRequest(新的NSUrlRequest(新的NSUrl(Element.Url));
}
}
公共覆盖大小请求GetDesiredSize(双宽度约束、双高度约束)
{
返回新的SizeRequest(Size.Zero,Size.Zero);
}
}
}

要解决旋转问题,您需要在创建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);
        }
    }
}
[程序集:ExportRenderer(typeof(CustomWebView)、typeof(CustomWebViewRenderer))]
namespaceMobile.App.iOS
{
公共类CustomWebViewRenderer:ViewRenderer
{      
受保护的覆盖无效OnElementChanged(ElementChangedEventArgs e)
{
基础。一个要素发生变化(e);
if(Control==null)
{
var webView=newuiwebview(NativeView.Bounds);
webView.shouldstartoad+=无手柄shouldstartoad;
webView.AutoresizingMask=ui视图autoresizing.All;
webView.ScalesPageToFit=true;
SetNativeControl(网络视图);
LoadRequest(新的NSUrlRequest(新的NSUrl(Element.Url));
}
}
公共覆盖大小请求GetDesiredSize(双宽度约束、双高度约束)
{
返回新的SizeRequest(Size.Zero,Size.Zero);
}
}
}