我很惊讶,简单地为现有字体设置粗体和斜体在
Swift中是如此复杂.
我只想通过在字体类上使用以下方法来简化操作.
我希望将以下方法添加到已设置font-family和font-size的现有字体中.我需要保留这些并仅更改以下内容.
setBold : Shud preserve italic
setItalic : Shud preserve bold
setBoldItalic
setNormal : remove both bold and italic
removeBold : Shud preserve italic
removeitalic : Shud preserve bold
我试过下面的内容,对我来说,使用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)
解决方法
您说您想要保留其他特征,因此您可能需要修改代码中的某些方法:
func setBold() -> UIFont { if isBold { return self } else { var symTraits = fontDescriptor().symbolicTraits symTraits.insert([.TraitBold]) let fontDescriptorVar = fontDescriptor().fontDescriptorWithSymbolicTraits(symTraits) return UIFont(descriptor: fontDescriptorVar,size: 0) } }
setItalic()和setBoldItalic()也是如此.
所以,removeBold()应该是这样的:
func removeBold()-> UIFont { if !isBold { return self } else { var symTraits = fontDescriptor().symbolicTraits symTraits.remove([.TraitBold]) let fontDescriptorVar = fontDescriptor().fontDescriptorWithSymbolicTraits(symTraits) return UIFont(descriptor: fontDescriptorVar,size: 0) } }
removeItalic()会类似.