我很惊讶,简单地为现有字体设置粗体和斜体在 Swift 中是如此复杂。
我只是想通过在字体类上使用以下方法来简化事情。
我希望将以下方法添加到已设置字体系列和字体大小的现有字体中。我需要保留这些并仅更改以下内容。
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()
类似。
但我不确定 setNormal()
。您想删除所有特征,还是只想删除斜体和粗体?也许您可以自己动手做。
关于Ios Swift使字体切换粗体,斜体,粗体斜体,正常而不改变其他属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38533323/