在“ UI标签”文本{之间”放置UI图像

时间:2019-09-18 17:42:23

标签: ios swift

我的应用使用API​​从Web服务器获取一些文本数据

文本数据以字符串数组形式出现。基本上每个元素都是一个段落。有时,数组元素之一是“ [IMAGE]”,这意味着我必须在上一个和下一个参数之间插入一个特定的图像(我也使用API​​获得其链接)

因此,例如,数组是[“ AAA”,“ BBB”,“ [IMAGE]”,“ CCC”]。然后必须在BBB和CCC之间显示图像

这是我从Web服务器获得响应的地方

let newsText = data[0]["text"] as! [String]
let images = data[0]["images"] as! [[String:Any]]

这就是我所做的


for para in newsText{
                    if(para == "[IMAGE]")
                    {
                        print("Image Found")
                        let paraImageLink = images[self.imageCount]["link"] as? String
                        let paraImage = self.urlToImage(url: paraImageLink!)
                        DispatchQueue.main.async {
                            let paraImageView = UIImageView(image: paraImage)
                            paraImageView.frame = CGRect(x: 0, y: 0, width: 100, height: 200)
                            self.view.addSubview(paraImageView)
                        }
                        self.imageCount+=1
                    }
                    else{
                        DispatchQueue.main.async {
                            self.text.text?.append(contentsOf: para+"\n\n\n")
                        }

                    }

                } 

现在可以成功检索并显示图像,但是它显示在屏幕的一角。这是正确的,因为我把X:0,Y:0

但是我的问题是如何正确定位图像以实现我想要的

这是我的模拟器的屏幕截图,图像位于右上角,我想在段落之间显示它

screenshot 1

所有内容都在UI滚动视图中,并且主图像下方的所有Text(而不是角落)都在单个UI标签中

编辑:

我尝试将属性字符串与附件一起使用

 for para in newsText{
                    if(para == "[IMAGE]")
                    {
                        print("Image Found")
                        let paraImageLink = images[self.imageCount]["link"] as? String
                        let paraImage = self.urlToImage(url: paraImageLink!)
                        let imageAttachement = NSTextAttachment()
                        imageAttachement.image = paraImage
                        let imageString = NSAttributedString(attachment: imageAttachement)
                        DispatchQueue.main.async {

                            self.text.attributedText = imageString
                        }
                        self.imageCount+=1
                    }
                    else{
                        DispatchQueue.main.async {
                            self.text.text?.append(contentsOf: para+"\n\n")
                        }

问题是无法产生预期的结果。检查此屏幕截图以查看其显示内容screenshot 2

我想这是因为如果我尝试这样做,则无法附加UI标签属性文本

self.text.attributedText.append = imageString

显示错误 类型为“ NSAttributedString?”的值没有成员“追加”

1 个答案:

答案 0 :(得分:2)

您可以使用像这样的属性字符串来实现。 首先创建emptyString变量,然后再将其作为图像添加到NSTextAttachmen中。

var text = String()

  1. 获取图像后,请创建属性附件,例如:

let imageAttachment = NSTextAttachment()

2.than将图像添加到附件中,例如:  imageAttachment.image = UIImage(named: paraImage)

  1. 像这样包装您的衣服: let imageString = NSAttributedString(attachment: imageAttachment) 4.然后将textAttribute附件添加到完整的字符串中,例如

text.append(image1String) 5.然后像这样

将其他文本字符串附加到您的完整字符串中

text.append(NSAttributedString(string: "End of")) 6.然后像这样

将字符串添加到textView中

textView.attributedText = text

对于连击了解,您可以看到此this