我的应用程序使用 API 从 Web 服务器获取一些文本数据
文本数据以字符串数组形式出现。基本上每个元素都是一个段落。有时数组元素之一是"[IMAGE]",这意味着我必须在上一个和下一个段落之间插入一个特定的图像(我也使用 API 获得其链接(
例如,数组是 [ "AAA" , "BBB" , "[图像]" , "CCC" ]。然后图像必须在BBB和CCC之间显示
这是我从网络服务器获得响应的地方
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+"nnn")
}
}
}
现在图像检索并显示成功,但它显示在屏幕的一角。这是正确的,因为我把 X:0 , Y: 0
但我的问题是我如何正确定位图像以实现我想要的
这是我模拟器的屏幕截图,图像在右上角,我想在段落之间显示它
截图 1
所有内容都在 UI 滚动视图中,主图像(不是角落图像(下方的所有文本都在单个 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+"nn")
}
问题是它没有产生预期的结果。检查此屏幕截图以查看它显示的内容屏幕截图 2.
我想这是因为您无法附加UI标签属性文本,如果我尝试这样做
self.text.attributedText.append = imageString
它显示错误 类型为"NSAttributedString?"的值没有成员"追加">
您可以使用这样的属性字符串来执行此操作。 首先创建 emptyString 变量,而不是当你得到字符串时,当你的 get image 将其添加到这个变量中时,它会作为 NSTextAttachmen
var text = String()
- 获取图像时,创建属性附件,例如:
let imageAttachment = NSTextAttachment()
2.将图像添加到附件中,例如:imageAttachment.image = UIImage(named: paraImage)
- 像:
let imageString = NSAttributedString(attachment: imageAttachment)
4.然后将文本属性属性添加到您的完整字符串中,例如
text.append(image1String)
5.然后将其他文本字符串附加到您的完整字符串中,如下所示
text.append(NSAttributedString(string: "End of"))
6.然后将字符串添加到文本中像这样查看
textView.attributedText = text
对于面糊了解你可以看到这个