首页 > 解决方案 > 我可以选择使用 Swift UITextView 呈现哪个 HTML 图像吗?

问题描述

我正在使用 UITextView 呈现从 Web API 下载的 HTML。我的挑战是,在不同尺寸的显示器存在多个图像文件的情况下,图像不会呈现。

示例:此图像确实呈现...

<figure data-align="right" data-img-src="https://uploads/original/image-02.jpg" data-ref-id="1300-627596" data-size="medium" data-ratio="1.2996254681648" data-width="267" data-embed-type="image" style="width: 267px">
    <a class="fluid-height" style="padding-bottom:130.0%" href="https://uploads/original/image-02.jpg" data-ref-id="1300-627596">
        <img alt="Praesent sed molestie lectus, sit amet dictum eros." src="https://uploads/original/image-02.jpg" srcset="https://uploads/original/image-02.jpg 267w" sizes="(max-width: 267px) 100vw, 267px" data-width="267"></a>
    <figcaption style=font-weight:500;font-size:13;color:666666>Pic 2 Caption</figcaption>

但是这张图片没有渲染

<figure data-align="right" data-img-src="https://uploads/original/image-01.jpg" data-ref-id="1300-2086678" data-size="small" data-ratio="1.2257525083612" data-width="598" data-embed-type="image" style="width: 598px">
    <a class="fluid-height" style="padding-bottom:122.6%" href="https://uploads/original/image-01.jpg" data-ref-id="1300-2086678">
        <img alt="Praesent sed molestie lectus, sit amet dictum eros." src="https://uploads/scale_small/image-01.jpg" srcset="https://uploads/original/image-01.jpg 598w, https://uploads/scale_small/image-01.jpg.jpg 522w" sizes="(max-width: 522px) 100vw, 522px" data-width="522"></a>
    <figcaption style=font-weight:500;font-size:13;color:666666>Pic 1 Caption</figcaption>
  </figure>

我知道这与不同的图像文件名有关。有没有办法选择要使用的文件?或者,也许在标题标签中添加一些东西?

标题标签:

<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title></head>

谢谢您的帮助

编辑:这就是我将数据加载到 UITextView 中的方式

let inputString = "<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title></head><body><span style='font-family:-apple-system;font-size:17'>
  <h2 style=font-weight:800;color:0282F8>Sample Heading</h2>
  <p style=font-weight:300>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas congue posuere neque a pretium. Nullam viverra ex tortor, quis dictum urna pulvinar non. In tristique nisi libero, nec ornare orci consequat suscipit. Maecenas quis elit magna. Donec finibus semper nulla sit amet dignissim. Vestibulum consectetur ullamcorper justo. Ut tincidunt nisi ut porta ornare.</p>
  <p style=font-weight:300>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas congue posuere neque a pretium. Nullam viverra ex tortor, quis dictum urna pulvinar non. In tristique nisi libero, nec ornare orci consequat suscipit. Maecenas quis elit magna. Donec finibus semper nulla sit amet dignissim. Vestibulum consectetur ullamcorper justo. Ut tincidunt nisi ut porta ornare.</p>
  <h2 style=font-weight:800;color:0282F8>Sample Heading</h2>
  <p style=font-weight:300>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas congue posuere neque a pretium. Nullam viverra ex tortor, quis dictum urna pulvinar non. In tristique nisi libero, nec ornare orci consequat suscipit. Maecenas quis elit magna. Donec finibus semper nulla sit amet dignissim. Vestibulum consectetur ullamcorper justo. Ut tincidunt nisi ut porta ornare.</p>
</span></body>"

func updateUIView(_ uiView: UITextView, context: UIViewRepresentableContext<HTMLView>) {
        
        DispatchQueue.main.async {
            let data = Data(self.inputString.utf8)
            if let attributedString = try? NSAttributedString(data: data, options: [.documentType: NSAttributedString.DocumentType.html], documentAttributes: nil) {
                uiView.isEditable = false
                uiView.attributedText = attributedString
            }
        }
    }

UITextView 示例

标签: htmlswiftuitextview

解决方案


推荐阅读