Ios Swift制作字体切换粗体、斜体、boldItalic、正常而不改变其他属性

2024-05-21

我很惊讶,在 Swift 中简单地为现有字体设置粗体和斜体是如此复杂。

我只是想通过在字体类上使用以下方法来简化事情。

我希望将以下方法添加到已设置字体系列和字体大小的现有字体中。我需要保留这些并仅更改以下内容。

setBold : Shud 保留斜体

setItalic : Shud 保留粗体

设置粗斜体

setNormal :删除粗体和斜体

removeBold :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)

我到处搜索,没有找到符合我需求的简单解决方案。


你说你想保留其他特征,所以你可能需要修改代码中的一些方法:

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() and setBoldItalic()以及。

So, 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()。您想要删除所有特征,还是只想删除斜体和粗体?也许你可以随心所欲地自己做。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Ios Swift制作字体切换粗体、斜体、boldItalic、正常而不改变其他属性 的相关文章

随机推荐