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

标签 ios swift uifont bold italic

我很惊讶,简单地为现有字体设置粗体和斜体在 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/

相关文章:

ios - 这里是iOS SDK Label Map Marker

ios - UICollectionView 在 prepareForSegue 中获取 indexPath

arrays - 在 swift 3 中移动数组末尾的一些对象

ios - 在 viewDidLoad() 之前调用 UITableViewController 委托(delegate)方法

ios - 带有 systemFontOfSize 的新 San Francisco 文本字体

ios - 我可以在后台使用 startupdatinglocation 吗?

ios - 如何在 Swift 中构造多个 HTTP 请求?

ios - 将数据从 ViewControllerA 传递到 ViewControllerB(QuickDialog)

iphone - 在 iOS 中,是否可以在运行时向应用程序添加字体?

ios - UIFont 自定义字体未在设备上显示