gpt4 book ai didi

ios - Swift iOS - 如何将 NSTextAttachment 内容模式设置为 Aspect Fit?

转载 作者:行者123 更新时间:2023-11-28 15:14:22 30 4
gpt4 key购买 nike

我有一个附加到字符串的 PDF 图像。我使用 NSTextAttachmentNSAttributedString 来完成它。我将它们添加到 textView 中,结果是 Hello,下面是 World 的图像。

问题是,当我在 textAttachment 上设置 PDF 图像的边界时,World 图像失真了。它又长又宽。

如何在 textAttachment 对象上设置 contentMode 以使用 .aspectRatio 正确重绘图像?

#4 是我设置边界的地方

// #1. Define dict attribute for string
let bold17 = [NSFontAttributeName: UIFont.boldSystemFont(ofSize: 17)]

// #2. Create "hello" string and add the dict attribute to it
let helloStr = NSAttributedString(string: "Hello\n\n", attributes: bold17)

// #3. Create NSTextAttachment
let textAttachment = NSTextAttachment()

// #4. Add image to the textAttachment then set it's bounds
textAttachment.image = UIImage(named: "world_PDF")
textAttachment.bounds = CGRect(x: 0, y: 0, width: 200, height: 200)

// #5. Set image as NSAttributedString
let worldImage = NSAttributedString(attachment: textAttachment)

// #6. Create NSMutableString to
let mutableAttributedString = NSMutableAttributedString()

// #7. Append the "hello" string and the "world" image to each other using the mutableAttributedString object
mutableAttributedString.append(helloStr)
mutableAttributedString.append(worldImage)

// #8. Set the mutableAttributedString to the textView then center it
textView.attributedText = mutableAttributedString
textView.textAlignment = .center

最佳答案

我遵循了@Maciej Swic 的回答

Resize NSTextAttachment Image

出于某种原因,我无法扩展 NSTextAttachment 类,所以我将它添加到我正在使用它的类的底部。我删除了我在问题中使用的 bounds 属性并使用他的功能代替。它在#4,第二行:

class MyController: UIViewController{

override func viewDidLoad() {
super.viewDidLoad()

// #1. Define dict attribute for string
let bold17 = [NSFontAttributeName: UIFont.boldSystemFont(ofSize: 17)]

// #2. Create "hello" string and add the dict attribute to it
let helloStr = NSAttributedString(string: "Hello\n\n", attributes: bold17)

// #3. Create NSTextAttachment
let textAttachment = NSTextAttachment()

// #4. Add image to the textAttachment then set it's bounds
textAttachment.image = UIImage(named: "world_PDF")
textAttachment.setImageHeight(height: 200) // <----HIS ANSWER HERE

// #5. Set image as NSAttributedString
let worldImage = NSAttributedString(attachment: textAttachment)

// #6. Create NSMutableString to
let mutableAttributedString = NSMutableAttributedString()

// #7. Append the "hello" string and the "world" image to each other using the mutableAttributedString object
mutableAttributedString.append(helloStr)
mutableAttributedString.append(worldImage)

// #8. Set the mutableAttributedString to the textView then center it
textView.attributedText = mutableAttributedString
textView.textAlignment = .center

}
}

extension NSTextAttachment {
func setImageHeight(height: CGFloat) {
guard let image = image else { return }
let ratio = image.size.width / image.size.height

bounds = CGRect(x: bounds.origin.x, y: bounds.origin.y, width: ratio * height, height: height)
}
}

关于ios - Swift iOS - 如何将 NSTextAttachment 内容模式设置为 Aspect Fit?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47128448/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com