无法在 Xamarin IOS 中捕获 WkWebView 的屏幕

Posted

技术标签:

【中文标题】无法在 Xamarin IOS 中捕获 WkWebView 的屏幕【英文标题】:Unable to capture screen of WkWebView in Xamarin IOS 【发布时间】:2019-09-26 05:22:53 【问题描述】:

我正在尝试在 ios 中捕获屏幕,除了 WkWebview 之外,我可以通过下面的代码捕获所有其他视图组件。WkWebview 正在提供一个空白页面作为捕获的数据。如果我使用 UIWebview 相同的代码工作是否有任何特定的操作来截取 WkWebView 的屏幕截图。

截屏代码。

public static UIImage SnapshotView(this UIView view)

   UIGraphics.BeginImageContextWithOptions(view.Bounds.Size, false, UIScreen.MainScreen.Scale);
    view.DrawViewHierarchy(view.Bounds, true);

    var image = UIGraphics.GetImageFromCurrentImageContext();
    UIGraphics.EndImageContext();

     return image;
 

WkWebView 配置:

WKWebView _wkWebView = new WKWebView(ReaderView.Frame, new WKWebViewConfiguration());

_wkWebView.LoadFileUrl(tempUrl, tempUrl);
_wkWebView.ContentMode = UIViewContentMode.ScaleToFill;
_wkWebView.BackgroundColor = UIColor.Clear;
_wkWebView.Opaque = false;
_wkWebView.ScrollView.BackgroundColor = UIColor.Clear;

//_wkWebView.DrawViewHierarchy(_wkWebView.Bounds, true);
ReaderView.AddSubview(_wkWebView);
var imag = _wkWebView.SnapshotView();

【问题讨论】:

如果DrawViewHierarchy没有被注释掉,它应该可以工作(假设html页面已经完成) 您是否尝试使用 PerformSelector 调用方法 SnapshotView() - 延迟 我也尝试过使用“DrawViewHierarchy”,然后我才将其注释掉。 @Prasanth,您能否提供示例代码或实现链接。 这样检查一次,NSTimer timer = NSTimer.CreateRepeatingScheduledTimer(TimeSpan.FromSeconds(3), delegate var imag = _wkWebView.SnapshotView();); 【参考方案1】:

我通过用 PdfView 替换 WKWebView 解决了这个问题。我正在使用这个视图来加载 PDF。

最新代码如下

pdfView = new PdfView();
            pdfView.TranslatesAutoresizingMaskIntoConstraints = false;
            ReaderView.AddSubview(pdfView);

            pdfView.LeadingAnchor.ConstraintEqualTo(View.SafeAreaLayoutGuide.LeadingAnchor).Active = true;
            pdfView.TrailingAnchor.ConstraintEqualTo(View.SafeAreaLayoutGuide.TrailingAnchor).Active = true;
            pdfView.TopAnchor.ConstraintEqualTo(View.SafeAreaLayoutGuide.TopAnchor).Active = true;
            pdfView.BottomAnchor.ConstraintEqualTo(View.SafeAreaLayoutGuide.BottomAnchor).Active = true;

            //  var path = Bundle.main.url(forResource: "test", withExtension: "pdf") else  return 

            PdfDocument document;
            // PdfDocument
            using (urlString = new NSString(FilePath))
            using (var tempUrl = NSUrl.CreateFileUrl(new string[]  urlString ))
                document = new PdfDocument(tempUrl);


            //if var document = PdfDocument(url: path) 
            pdfView.Document = document;

【讨论】:

以上是关于无法在 Xamarin IOS 中捕获 WkWebView 的屏幕的主要内容,如果未能解决你的问题,请参考以下文章

无法从UIKit.UIImage转换为ZXing.LuminanceSource - 2017年Visual Studio中的Xamarin iOS

如何验证照片捕获屏幕在 Xamarin UITest 中是不是打开?

使用啥控件从相机捕获图像并在 ui 上显示为带有事件 xamarin ios 的缩略图

Xamarin.iOS:无法在 UIScrollView 中调用 TouchEvent

Xamarin.iOS 无法在推送通知中显示照片

无法在 Xamarin iOS 中获取 RootViewController