SwiftUI内联文本,图像位于多行文本的右侧?

oxcyiej7  于 2023-10-15  发布在  Swift
关注(0)|答案(1)|浏览(120)

我在Assets文件夹中存储了一个图像,我的目标是将其附加到多行文本中。我不想把它放在HStack里;相反,我希望它出现在文本的末尾,而不管文本跨越多少行。请参考下面的图像以获取可视化示例。

我知道使用Text(Image(systemName: "imageName"))是一个合适的解决方案,特别是对于SFSymbols。
但是,当处理超过文本字体大小的资产图像时,这种方法并不有效。下面的图像是通过使用以下代码与资产图像。

Text(Image("info"))

wmtdaxz3

wmtdaxz31#

我找到了一个解决方案,并写了一篇简短的文章。我愿意探索其他方法。
Inline Text and Image
这是让事情为我工作的代码:

struct InlineView: View {
   private var text = "This is a multi-line text. It has multiple lines. It has multiple lines. It has multiple lines. It has multiple lines. "
   private var image = "info" // Replace with your image name
   private let font: Font = .system(size: 17)

   var body: some View {
       Text(text)
           .font(font)
       + Text("\(getCustomImage())")
   }

   private func getCustomImage(color: Color = .gray, newSize: CGSize = CGSize(width: 17, height: 17)) -> Text {
       if let image = UIImage(named: image),
          let newImage = convertImageToNewFrame(image: image, newFrameSize: newSize) {
           return Text(
               Image(uiImage: newImage)
                   .renderingMode(.template)
           )
           .baselineOffset(-1.5)
           .foregroundStyle(color)
       }
       return Text(Image(systemName: "heart.fill"))
   }

   func convertImageToNewFrame(image: UIImage, newFrameSize: CGSize) -> UIImage? {
       UIGraphicsBeginImageContextWithOptions(newFrameSize, false, 0.0)
       image.draw(in: CGRect(origin: .zero, size: newFrameSize))
       let newImage = UIGraphicsGetImageFromCurrentImageContext()
       UIGraphicsEndImageContext()
       return newImage
   }
}

相关问题