我想在UILabel
内合并图片和文字。为了实现这一点,我使用了这部分代码:
let attributedText = NSMutableAttributedString(string: "")
let attachment = NSTextAttachment()
attachment.image = image.withRenderingMode(.alwaysTemplate)
attachment.bounds = CGRect(x: 0, y: 0, width: 20, height: 20)
attributedText.append(NSAttributedString(attachment: attachment))
attributedText.append(NSMutableAttributedString(string: "test",
attributedText.addAttribute(NSAttributedStringKey.foregroundColor,
value: UIColor.white,
range: NSMakeRange(0, attributedText.length))
文本具有白色前景色,但遗憾的是图像仍然是原始颜色。有趣的是,当我将第一行更改为此(初始化程序内的空格)时:
let attributedText = NSMutableAttributedString(string: " ")
然后一切正常。但问题是标签内的整个文本由于空格而偏移。如何在不添加空格的情况下更改图像颜色?
答案 0 :(得分:4)
您必须使用图形上下文来反转颜色。我可能会把它作为UIImage的扩展。
示例swift代码如下。
extension UIImage {
func imageWithColor(color:UIColor) -> UIImage {
let rect = CGRect(x: 0, y: 0, width: self.size.width, height: self.size.height);
UIGraphicsBeginImageContext(rect.size)
let context = UIGraphicsGetCurrentContext()
context?.clip(to: rect, mask: self.cgImage!)
context?.setFillColor(color.cgColor)
context?.fill(rect)
let imageFromCurrentContext = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return UIImage(cgImage: imageFromCurrentContext!.cgImage!, scale: 1.0, orientation:.downMirrored)
}
}
答案 1 :(得分:1)
这种行为似乎是UIKit中的一个错误。唉,我不知道一个解决方案,希望其他人能做到,但现在这里有一个解决方法:
您可以在将图像添加为文本附件之前为图像着色。一种简单的方法是使用第三方框架,例如这一个:https://github.com/vilanovi/UIImage-Additions
然后您可以简单地写下image.withRenderingMode(...)
而不是attachment.image = image.add_tintedImage(with: .white, style: ADDImageTintStyleKeepingAlpha)
。
import DS from 'ember-data';
export default DS.Model.extend({
type: DS.attr('string'),
email: DS.attr('string'),
days: DS.attr('number'),
isInstant: DS.attr('boolean'),
cutHours: DS.attr('number')
});
答案 2 :(得分:0)
结果证明,UIKit中的错误仍然存在,但是为了避免由于空格而导致的偏移量,可以使用空字符串代替空格。 只要做:
<p-menubar [model]="items">
<ng-template pTemplate="start">
<img src="/assets/images/logo.png" height="40" class="p-mr-2" alt="brand logo">
</ng-template>
<ng-template pTemplate="end">
<label>
<input type="text" pInputText placeholder="Szukaj">
</label>
<button type="button" (click)="logout()" pButton label="Wyloguj" icon="pi pi-power-off" style="margin-left:.25em"></button>
</ng-template>
</p-menubar>
代替
let attributedText = NSMutableAttributedString(string: "\0")