swift 如何使用CSS在NSAttributedString中的HTML文本中覆盖图像

zzzyeukh  于 12个月前  发布在  Swift
关注(0)|答案(1)|浏览(88)

我正在尝试解析包含youtube视频的html文本。为了显示此视频,我使用了预览图像。
初始文本:

<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</p>\n<p><iframe loading=\"lazy\" title=\"Forza Horizon 5 : RTX 4090 24GB ( 8K Maximum Settings RTX ON / DLSS ON )\" width=\"500\" height=\"281\" src=\"https://www.youtube.com/embed/NcHyE_N1QDI?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" allowfullscreen></iframe></p>\n<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</p>

字符串
然后它看起来像这些:

<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. </p>\n<p><a href=\'https://www.youtube.com/watch?v=NcHyE_N1QDI\'><img src=\"https://img.youtube.com/vi/NcHyE_N1QDI/maxresdefault.jpg\" alt=\"\" width=\"393.0\"/></a></p>\n<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</p>


然后我使用NSMutableAttributedString并将新值赋给ExtView的attributedText属性。
问题是如何在预览图像上叠加一个播放按钮,以便用户理解这是一个视频。我假设这可以使用CSS完成,但不知道如何正确地将其嵌入代码中。
我的代码:

private func formatStringWithYTVideo(text: String, with width: Float) -> String {
        let iframeTexts = matches(for: ".*iframe.*", in: text)
        var newText = text
        
        if !iframeTexts.isEmpty {
            
            for iframeText in iframeTexts {
                let iframeId = matches(for: "((?<=(v|V)/)|(?<=be/)|(?<=(\\?|\\&)v=)|(?<=embed/))([\\w-]++)", in: iframeText);
                
                if !iframeId.isEmpty {
                    let htmlString = """
                    <p><a href='https://www.youtube.com/watch?v=\(iframeId[0])'><img src="https://img.youtube.com/vi/\(iframeId[0])/maxresdefault.jpg" alt="" width="\(width)"/></a></p>
                    """
                    
                    newText = newText.replacingOccurrences(of: iframeText, with: htmlString)
                }
            }
        }
        
        return newText
    }

n7taea2i

n7taea2i1#

看起来这不能通过UITextView和CSS来实现,因为UITextView不支持所需的属性。
1:使用WKWebView而不是UITextView
第二章:使用enumerateAttributes(in:options:using:)方法。获取属性列表,在其中找到所需的图像并替换它。您可以使用UIImageView创建具有覆盖的图像,然后使用UIGraphicsImageRenderer将其转换为UIImage

相关问题