[英]How to center image in attributed string?
I have an image
that I want to center alongside a bunch of text but even when I set the NSMutableParagraphStyle
alignment
to center
, the line with the image does not center我有一张
image
,我想与一堆文本一起居中,但即使我将NSMutableParagraphStyle
alignment
设置为center
,带有图片的行也不会居中
If anyone could please help me center the line with the image (ie first line) that would be great!如果有人可以帮助我将图像(即第一行)居中,那就太好了!
let text = " text next to image is not centered \n\n centered text \n more centered text"
let iconAttachment = textAttachment(fontSize: 14, image: #imageLiteral(resourceName: "icon"))
let iconString = NSAttributedString(attachment: iconAttachment)
let style = NSMutableParagraphStyle()
style.alignment = .center
style.minimumLineHeight = 20
let attributedText = NSMutableAttributedString()
attributedText.append(iconString)
let fullText = NSAttributedString(string: text, attributes: [NSParagraphStyleAttributeName : style])
attributedText.append(fullText)
private func textAttachment(fontSize: CGFloat, image: UIImage) -> NSTextAttachment {
let font = UIFont.systemFont(ofSize: fontSize) //set accordingly to your font, you might pass it in the function
let textAttachment = NSTextAttachment()
textAttachment.image = image
let mid = font.descender + font.capHeight
textAttachment.bounds = CGRect(x: 0, y: font.descender - image.size.height / 2 + mid + 2, width: image.size.width, height: image.size.height).integral
return textAttachment
}
Here is the code to achieve desire image in center.这是在中心实现愿望图像的代码。
let text = "\ntext next to image is not centered \n\n centered text \n more centered text"
let iconAttachment = textAttachment(fontSize: 5, image: #imageLiteral(resourceName: "eye"))
let iconString = NSAttributedString(attachment: iconAttachment)
let style = NSMutableParagraphStyle()
style.alignment = .center
style.minimumLineHeight = 20
let attributedText = NSMutableAttributedString()
attributedText.append(iconString)
let fullText = NSAttributedString(string: text, attributes: [NSParagraphStyleAttributeName : style])
attributedText.append(fullText)
lbl.attributedText = attributedText;
lbl.numberOfLines = 0
lbl.lineBreakMode = .byWordWrapping
lbl.textAlignment = .center
Output Output
Note: no change in function注:function无变化
You should use.baselineOffset.你应该使用.baselineOffset。 Depending on your font size, the offSet is varied.
根据您的字体大小,offSet 会有所不同。
let image = NSImage(imageLiteralResourceName: "snail")
let attachment = NSTextAttachment()
attachment.image = image
let mutableAttributedString = NSMutableAttributedString(attachment: attachment)
mutableAttributedString.addAttributes([.baselineOffset : -2], range: NSRange(location: 0, length: mutableAttributedString.length))
mutableAttributedString.append(NSAttributedString(string: " Hello World!"))
label.attributedStringValue = mutableAttributedString
Result:结果:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.