我正在尝试在UITextView中加粗部分文本。 这是我正在使用的代码(虽然我简化了文本):
@IBOutlet weak var textview: UITextView!
/*...*/
var str : NSMutableAttributedString = NSMutableAttributedString(string:"this is a test", attributes: [NSFontAttributeName:textview.font!] )
str.addAttribute(NSFontAttributeName, value: UIFont(name: "GillSans-Bold", size: 16)!, range: NSMakeRange(10, 4))
textview.attributedText = str
然而它不起作用,我不明白为什么......我见过的所有例子都使用了这个。没有错误,但文本中没有任何内容以粗体显示。
很抱歉,如果它是重复的,我发现很多帖子都在谈论在uitextview中以粗体显示文本,有些人使用这种技术,但据我所知,没有任何问题。我错过了什么吗?我读错了吗?
提前致谢。
答案 0 :(得分:-1)
一个原因可能是您使用的字体不存在或在代码中未正确命名。这是一个显示所有可用字体列表的巧妙技巧:
//credits to Chris: http://codewithchris.com/common-mistakes-with-adding-custom-fonts-to-your-ios-app/#includefonts
func printFontFamilyNames(){
for family: String in UIFont.familyNames()
{
print("\(family)")
for names: String in UIFont.fontNamesForFamilyName(family)
{
print("== \(names)")
}
}
}
这可能无法直接回答您的问题,但我相信您会发现它有用。并检查此代码块顶部的链接,我已从中提取此函数。
<强>更新强>
这是我编写的一段代码,它正确地更改了UILabel 中属性字符串的字体:
if let terms = self.terms {
let text = NSMutableAttributedString(string: terms.text!)
let textAsString = text.string as NSString
let range = NSMakeRange(0, textAsString.length)
textAsString.enumerateSubstringsInRange(range, options: NSStringEnumerationOptions.ByWords, usingBlock: { (substring, substringRange, enclosingRange, _) -> () in
if ["Create", "Account", "Terms", "of", "Service", "Privacy", "policy"].contains(substring!) {
if let font = UIFont(name: "OpenSans-Semibold", size: 11) {
text.addAttribute(NSFontAttributeName, value: font, range: substringRange)
} else {
Services.log("Invalid font")
}
}
//...
})
terms.attributedText = text
}
注意:此代码包含项目特定的类和变量,但我相信您可以提取所需的内容。