我的应用使用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
但是我的问题是如何正确定位图像以实现我想要的
这是我的模拟器的屏幕截图,图像位于右上角,我想在段落之间显示它
所有内容都在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?”的值没有成员“追加”
答案 0 :(得分:2)
您可以使用像这样的属性字符串来实现。 首先创建emptyString变量,然后再将其作为图像添加到NSTextAttachmen中。
var text = String()
let imageAttachment = NSTextAttachment()
2.than将图像添加到附件中,例如:
imageAttachment.image = UIImage(named: paraImage)
let imageString = NSAttributedString(attachment: imageAttachment)
4.然后将textAttribute附件添加到完整的字符串中,例如 text.append(image1String)
5.然后像这样
text.append(NSAttributedString(string: "End of"))
6.然后像这样
textView.attributedText = text
对于连击了解,您可以看到此this