【发布时间】:2016-08-10 15:53:03
【问题描述】:
我正在尝试使用NSMutableAttributedString 将标签的特定部分设置为粗体和斜体,但我只能选择其中一个。我使用的字体是 Clear Sans。将情节提要上的整个标签字体设置为Bold Italic 效果很好,但我只需要其中的一部分。所以我用了
for family in UIFont.familyNames() {
print("\(family)\n\t\(UIFont.fontNamesForFamilyName(family))")
}
为了确保它在那里,我找到了
Clear Sans
["ClearSans", "ClearSans-Bold", "ClearSans-Italic"]
出于某种原因,它不在此处,但在情节提要中。所以我尝试使用this answer,但它崩溃了,我假设与我没有找到ClearSans-BoldItalic 的原因相同,但我不知道为什么它不在那里。
最后,我尝试将两者“堆叠”起来,就像这样
let bold = UIFont(name: "ClearSans-Bold", size: 20)
let italic = UIFont(name: "ClearSans-Italic", size: 20)
attributedCaption.addAttribute(NSFontAttributeName, value: bold!, range: (imageContainer.caption as NSString).rangeOfString(matchString))
attributedCaption.addAttribute(NSFontAttributeName, value: italic!, range: (imageContainer.caption as NSString).rangeOfString(matchString))
但所有这些都是使用 last 属性,这是我所期望的。
我可以使用其他方法来做到这一点,以便在标签的同一部分同时显示粗体和斜体吗?
编辑
我想在项目中包含我的字体,所以很明显我已经导入了它们。第二张图片是故事板上的字体列表。虽然被掩盖了,但家人实际上是Clear Sans。
【问题讨论】:
-
尝试下载
Clear Sans Bold Italic字体。然后您应该可以使用ClearSans-BoldItalic。 fontsquirrel.com/fonts/clear-sans -
您不能只是通过实例化具有所需符号特征的 UIFontDescriptor 对象然后从该描述符实例化新字体来即时创建任意字体。您使用描述符描述的字体必须已经存在于系统中,无论是标准字体还是您手动添加的字体。因此,只需按照 kye 的说明下载粗斜体版本,将其添加到您的项目中并使用它的名称来实例化新字体。
-
@kye 我刚刚用我的字体文件夹的屏幕截图更新了这个问题。我已经在项目中使用了它(这就是它出现在故事板上的原因),但没有考虑将其包含在问题中。谢谢!
-
@Cody Harness 您是否在 UIAppFonts 键下的 info.plist 中添加了粗斜体版本?
-
@Russian 就是这样!我什至没有想到,我已经很久没有添加字体了。谢谢。如果您想将其发布为答案,那么我很乐意接受。
标签: ios swift fonts nsmutableattributedstring