我在Xamarin.Forms项目中为WebView创建了一个自定义渲染器。 WebView在Android上运行良好。不幸的是,在iOS上,当设备旋转时,网页(任何网页)都无法正确调整到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")));
}
}
}
}
答案 0 :(得分:2)
要解决此问题,请将以下内容添加到自定义渲染器:
public async static Task<IEnumerable<RootObjectUtrechtCity>> GetUtrechtCity()
{
var http = new HttpClient();
var response = await http.GetAsync("https://stallingsnet.nl/api/1/parkingcount/utrecht");
var result = await response.Content.ReadAsStringAsync();
var data = JsonConvert.DeserializeObject<List<RootObjectUtrechtCity>>(result);
return data;
}
答案 1 :(得分: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);
}
}
}