【发布时间】:2016-07-22 18:41:02
【问题描述】:
我很惊讶,在 Swift 中简单地为现有字体设置粗体和斜体是如此复杂。
我只是想通过在字体类上使用以下方法来简化事情。
我希望将以下方法添加到已设置 font-family 和 font-size 的现有字体中。我需要保留这些并仅更改以下内容。
setBold : Shud 保留斜体
setItalic : Shud 保留粗体
setBoldItalic
setNormal : 去掉粗体和斜体
removeBold : Shud 保留斜体
removeitalic : Shud 保留粗体
我尝试了以下方法,但使用 fontDescriptorWithSymbolicTraits 对我来说就像一场噩梦。
有没有更简单的方法可以在几行代码中完成这些操作?
extension UIFont
{
var isBold: Bool
{
return fontDescriptor().symbolicTraits.contains(.TraitBold)
}
var isItalic: Bool
{
return fontDescriptor().symbolicTraits.contains(.TraitItalic)
}
func setBold() -> UIFont
{
var fontDescriptorVar: UIFontDescriptor
if(isBold){
return self
}
else
{
fontDescriptorVar = fontDescriptor().fontDescriptorWithSymbolicTraits(.TraitBold)
}
return UIFont(descriptor: fontDescriptorVar, size: 0)
}
func setItalic()-> UIFont
{
var fontDescriptorVar: UIFontDescriptor
if(isItalic) {
return self
}
else
{
fontDescriptorVar = fontDescriptor().fontDescriptorWithSymbolicTraits(.TraitItalic)
}
return UIFont(descriptor: fontDescriptorVar, size: 0)
}
func setBoldItalic()-> UIFont
{
let fontDescriptorVar = fontDescriptor().fontDescriptorWithSymbolicTraits(UIFontDescriptorSymbolicTraits(arrayLiteral: .TraitBold, .TraitItalic))
return UIFont(descriptor: fontDescriptorVar, size: 0)
}
// Things I need are
// To set back to normal
func setNormal()-> UIFont
{
}
// Remove only bold if it's both bold and Italic
func removeBold()-> UIFont
{
}
// Remove only italic if it's both bold and Italic
func removeitalic()-> UIFont
{
}
}
我不想使用这个询问我输入的大小和字体:
UIFont(name "namFontFamily", size: 16)
UIFont.systemFontOfSize(16, weight: UIFontWeightLight)
我到处搜索,没有找到符合我需求的简单解决方案。
【问题讨论】:
-
我认为检查字体系列非常重要,因为并非所有字体都有粗体和斜体形式,您是使用默认字体还是添加了新字体?
-
我有自己的字体系列列表,其中包括粗体和斜体。字体也有文本颜色
-
大多数字体都有“粗体”或“斜体”后缀,所以如果您的字体名称与此模式匹配,您可能会根据它们的名称来构建您的字体。
-
我的方法应该与字体系列无关,它应该像在 css 中一样加粗。因为它试图创建一个供所有时间使用的通用对象
标签: ios swift uifont bold italic