我的应用程序使用 API 从网络服务器获取一些文本数据
文本数据来自一个字符串数组。基本上每个元素都是一个段落。有时数组元素之一是 "[IMAGE]",这意味着我必须在上一段和下一段之间插入一个特定的图像(我也使用 API 获得了它的链接)
所以对于 ex,数组是 [ "AAA", "BBB", "[IMAGE]", "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+"\n\n\n")
}
}
}
现在图像已成功检索并显示,但它显示在屏幕的一角。这是正确的,因为我输入了 X:0 , Y: 0
但我的问题是如何正确定位图像以实现我想要的效果
这是我的模拟器截图,图片在右上角,我想在段落之间显示
一切都在一个 UI ScrollView 中,主图像下方的所有文本(不是角落的)都在一个 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?”类型的值?没有成员 'append'
最佳答案
您可以像这样使用属性字符串来做到这一点。 首先创建 emptyString 变量,然后当您获取字符串时将其添加到此变量中,当您获取图像时将其添加到 NSTextAttachmen
var text = String()
- 获取图片后创建属性附件,如:
让 imageAttachment = NSTextAttachment()
2.然后将您的图像添加到附件中,例如:
imageAttachment.image = UIImage(命名为:paraImage)
- 像这样包装你的附件:
让 imageString = NSAttributedString(附件: imageAttachment)
4.然后将 textAttribute 附件添加到您的完整字符串中,例如
text.append(image1String)
5. 然后像这样将其他文本字符串附加到您的完整字符串中
text.append(NSAttributedString(string: "End of"))
6.然后像这样将你的字符串添加到你的textView中
textView.attributedText = text
想了解的可以看这个this
关于ios - 定位一个UI Image "In Between "UI Label的文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57998192/