ios - 定位一个UI Image "In Between "UI Label的文本

标签 ios swift

我的应用程序使用 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

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

这是我的模拟器截图,图片在右上角,我想在段落之间显示

screenshot 1

一切都在一个 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()

  1. 获取图片后创建属性附件,如:

让 imageAttachment = NSTextAttachment()

2.然后将您的图像添加到附件中,例如: imageAttachment.image = UIImage(命名为:paraImage)

  1. 像这样包装你的附件: 让 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/

相关文章:

ios - 为 iOS 应用程序添加深色模式

android - iPhone/iPad 应用程序可以嵌入可以使用 HTML5 标签播放 RTSP 流的浏览器吗?

ios - 为什么自定义 SwiftUI View 不对状态变化使用react

iphone - 无法从mainbundle中读取plist

ios - 找不到匹配的签名身份 "Mac Developer:"

ios - 查询后写入 Parse 列 - Swift

facebook - 在 Xcode 6 中导入 FacebookSDK - swift

arrays - 如何将标签分配给随机数(Swift)

swift - 无法将类型 'Int' 的返回表达式转换为返回类型“Property<Int>”

ios - 使用自动布局时如何知道 UITableViewCell 的宽度?