4

我已经为此苦苦挣扎了一段时间,fontDescriptor.withSymbolicTraits每当我尝试使用BoldItalic时它都会返回 nil 。

我在下面使用这个代码:

func withTraits(traits:UIFontDescriptor.SymbolicTraits) -> UIFont {
    let descriptor = fontDescriptor.withSymbolicTraits(traits)
    return UIFont(descriptor: descriptor!, size: 0) //size 0 means keep the size as it is }

func bold() -> UIFont {
    return withTraits(traits: .traitBold) }

func italic() -> UIFont {
    return withTraits(traits: .traitItalic) }

但是应用程序停止并显示此错误(这指向fontDescriptor.withSymbolicTraits):

致命错误:在展开可选值时意外发现 nil 致命错误:在展开可选值时意外发现 nil

我还尝试了这段代码(正如我在网上阅读的那样,它适用于其他开发人员):

    var isBold: Bool {
        return fontDescriptor.symbolicTraits.contains(.traitBold)
    }

    var isItalic: Bool {
        return fontDescriptor.symbolicTraits.contains(.traitItalic)
    }

    func setBoldFnc() -> UIFont {
        if(isBold) {
            return self
        } else {
            var fontAtrAry = fontDescriptor.symbolicTraits
            fontAtrAry.insert([.traitBold])
            guard let fontAtrDetails = fontDescriptor.withSymbolicTraits(fontAtrAry) else { return self }
            return UIFont(descriptor: fontAtrDetails, size: 0)
        }
    }

    func setItalicFnc()-> UIFont {
        if(isItalic) {
            return self
        } else {
            var fontAtrAry = fontDescriptor.symbolicTraits
            fontAtrAry.insert([.traitItalic])
            guard let fontAtrDetails = fontDescriptor.withSymbolicTraits(fontAtrAry) else { return self }
            return UIFont(descriptor: fontAtrDetails, size: 0)
        }
    }

有人在 iOS 12 及以后的版本中遇到过这种情况吗?

我还读到 iOS 8 中存在与此相关的错误,但表示已在更高版本中修复了此问题:

https://code-examples.net/en/q/18c6177

字体描述符在 iOS 8 中返回 nil

*注意:我只使用了“-Regular”文件的自定义字体。因为某些字体没有“-Italic”或“-Bold”字体样式。

示例:Archivo Black 字体和 Oswald 字体

4

0 回答 0