如何使用Xamarin.Forms修复用于iOS的WebView自定义呈现程序的旋转?
我已经在Xamarin.Forms项目中为WebView创建了自定义渲染器。WebView在Android上运行得非常好。不幸的是,在iOS上,当设备旋转时,网页(任何网页)无法正确地调整到WebView的新维度。如果我对表单使用内置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.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);
}
}
}