Ios Swift使字体切换粗体,斜体,粗体,正常而不更改其他属性

我很惊讶,简单地为现有字体设置粗体和斜体在 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()会类似.

但我不确定setNormal().你想要删除所有特征,或者只想删除斜体和粗体?也许你可以随意自己做.

以上是来客网为你收集整理的Ios Swift使字体切换粗体,斜体,粗体,正常而不更改其他属性全部内容,希望文章能够帮你解决Ios Swift使字体切换粗体,斜体,粗体,正常而不更改其他属性所遇到的程序开发问题。

如果觉得来客网网站内容还不错,欢迎将来客网网站推荐给程序员好友。