Swift 使用符号特征从*浅*字体创建斜体版本
我想要一个斜体的浅色字体,例如“HelveticaNeue light” 使用Swift 使用符号特征从*浅*字体创建斜体版本,swift,uifont,uifontdescriptor,Swift,Uifont,Uifontdescriptor,我想要一个斜体的浅色字体,例如“HelveticaNeue light” 使用fontDescriptor可以得到斜体版的“常规”Helvetica Neue,而不是斜体版的“Helvetica Light”。我可以检索fontDescriptor.fontAttributes并更新UIFontDescriptor.AttributeName.name,但这很棘手,因为每个字体的命名不同(“HelveticaNeue”使用“斜体”,Helvetica使用“斜体”) let lightFont=U
fontDescriptor
可以得到斜体版的“常规”Helvetica Neue,而不是斜体版的“Helvetica Light”。我可以检索fontDescriptor.fontAttributes
并更新UIFontDescriptor.AttributeName.name
,但这很棘手,因为每个字体的命名不同(“HelveticaNeue”使用“斜体”,Helvetica使用“斜体”)
let lightFont=UIFont(名称:“HelveticaNeue Light”,大小:16.0)!
var lightFontDescriptor=lightFont.fontDescriptor.withSymbolicTraits([.tratitalic])!
var lightFontWithItalicTraits=UIFont(描述符:lightFontDescriptor,大小:0)
//字体系列:“HelveticaNeue灯”;字体大小:正常;字体风格:普通;字体大小:16.00pt
打印(lightFont)
//字体系列:“Helvetica Neue”;字体大小:正常;字体:斜体;字体大小:16.00pt
打印(带斜体标记的LightFont)
//我期望的字体是:
让lightItalicFont=UIFont(名称:“HelveticaNeue LightItalic”,大小:16.0)!
//字体系列:“HelveticaNeue LightItalic”;字体大小:正常;字体:斜体;字体大小:16.00pt
打印(lightItalicFont)
还有其他办法可以得到现有字体的斜体版本吗?它不是最漂亮的,但很实用。它处理所有内置的iOS字体 分机:
extension UIFont {
func italic() -> UIFont? {
if let italic = UIFont.init(name: "\(self.fontName)-Italic", size: self.pointSize) {
return italic
} else if let italic = UIFont.init(name: "\(self.fontName)Italic", size: self.pointSize) {
return italic
}
if let oblique = UIFont.init(name: "\(self.fontName)-Oblique", size: self.pointSize) {
return oblique
} else if let oblique = UIFont.init(name: "\(self.fontName)Oblique", size: self.pointSize) {
return oblique
}
var suffixFontName = self.fontName // for font names that have a 2 letter suffix such as ArialMT
suffixFontName.removeLast(2)
let suffix = self.fontName.suffix(2)
if let suffixFontName = UIFont.init(name: "\(suffixFontName)-Italic\(suffix)", size: self.pointSize) {
return suffixFontName
}
if let suffixFontName = UIFont.init(name: "\(suffixFontName)Italic\(suffix)", size: self.pointSize) {
return suffixFontName
}
// no italic, oblique, or mt italic font found
return nil
}
}
用法:
let helveticaNeueLightItalic = UIFont(name: "HelveticaNeue-Light", size: 16.0)!.italic()
print(helveticaNeueLightItalic)
let helveticaItalic = UIFont(name: "Helvetica", size: 16.0)!.italic()
print(helveticaItalic)
let helveticaLightItalic = UIFont(name: "Helvetica-Light", size: 16.0)!.italic()
print(helveticaLightItalic)
let arialMtItalic = UIFont(name: "ArialMT", size: 16.0)!.italic()
print(arialMtItalic)
let arialMtBoldItalic = UIFont(name: "Arial-BoldMT", size: 16.0)!.italic()
print(arialMtBoldItalic)
谢谢,我希望有办法让
UIFontDescriptor
来做这件肮脏的工作。但是你是对的,这就完成了工作,并且有了一些单元测试,它就可以被未来验证了。真的!很乐意帮助:-)suffixFontName
不是真正的后缀,而是没有后缀的名称,后缀是foundry
,也可以是前缀(LT、MT、a、BT、FB、URW
),而不仅仅是两个字母。
let helveticaNeueLightItalic = UIFont(name: "HelveticaNeue-Light", size: 16.0)!.italic()
print(helveticaNeueLightItalic)
let helveticaItalic = UIFont(name: "Helvetica", size: 16.0)!.italic()
print(helveticaItalic)
let helveticaLightItalic = UIFont(name: "Helvetica-Light", size: 16.0)!.italic()
print(helveticaLightItalic)
let arialMtItalic = UIFont(name: "ArialMT", size: 16.0)!.italic()
print(arialMtItalic)
let arialMtBoldItalic = UIFont(name: "Arial-BoldMT", size: 16.0)!.italic()
print(arialMtBoldItalic)