我是C#和Xamarin的新手。我觉得有一些快速的解决方案可以实现这一目标,但是我已经花了一天的时间找到一个解决方案。请给我一个提示,以便我朝正确的方向前进。
方法是在获取“高度和宽度”后调整窗口大小。问题是GetWidth()
和GetHeight()
在异步模式下运行,而主线程设置了Window.SetFrame(...)
,因此我无法调整窗口大小。
我认为一种解决方案是在最里面的块中级联并设置Window框架。
private void ResizeWindow()
{
_webView.EvaluateJavaScript("document.readyState",
(complete, error) =>
{
if (complete != null)
{
GetHeight();
GetWidth();
CGRect windowRect = Window.Frame;
windowRect.Size = new CGSize(_width, _height);
Window.SetFrame(windowRect,true);
}
});
}
private void GetWidth()
{
_webView.EvaluateJavaScript("document.body.scrollWidth",
(scrollWidth, wError) =>
{
if (scrollWidth != null && nfloat.TryParse(scrollWidth.ToString(), out nfloat value))
{
_width = value;
}
});
}
private void GetHeight()
{
_webView.EvaluateJavaScript("document.body.scrollHeight",
(scrollHeight, hError) =>
{
if (scrollHeight != null && nfloat.TryParse(scrollHeight.ToString(), out nfloat value))
{
_height = value;
}
});
}
答案 0 :(得分:1)
Xamarin.iOS
已经有TaskCompletionSource
的基于WKWebView.EvaluateJavaScript
的包装器。
因此,您可以await
调用EvaluateJavaScriptAsync
以获得基于NSValue
的结果,然后将其转换为C#值类型。
由于我知道正在运行的javascript返回数字,因此我可以将NSObject
返回(实际上是NSValue
)转换为NSNumber
并获得C#{{1} }。
long