【问题标题】:Swift iOS -How to Set NSTextAttachment Content Mode to Aspect Fit?Swift iOS - 如何将 NSTextAttachment 内容模式设置为 Aspect Fit?
【发布时间】:2017-11-06 01:21:28
【问题描述】:

我有一个附加到字符串的 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

【问题讨论】:

    标签: ios swift uiimage nsattributedstring nstextattachment


    【解决方案1】:

    我关注了@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)
        }
    }
    

    【讨论】:

    • NSTextAttachment.setImageHeight: 在 Xcode 9.3 中不可用。哦,这是一个扩展,我的错。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-29
    • 2014-01-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多