Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 使用符号特征从*浅*字体创建斜体版本_Swift_Uifont_Uifontdescriptor - Fatal编程技术网

Swift 使用符号特征从*浅*字体创建斜体版本

Swift 使用符号特征从*浅*字体创建斜体版本,swift,uifont,uifontdescriptor,Swift,Uifont,Uifontdescriptor,我想要一个斜体的浅色字体,例如“HelveticaNeue light” 使用fontDescriptor可以得到斜体版的“常规”Helvetica Neue,而不是斜体版的“Helvetica Light”。我可以检索fontDescriptor.fontAttributes并更新UIFontDescriptor.AttributeName.name,但这很棘手,因为每个字体的命名不同(“HelveticaNeue”使用“斜体”,Helvetica使用“斜体”) let lightFont=U

我想要一个斜体的浅色字体,例如“HelveticaNeue light”

使用
fontDescriptor
可以得到斜体版的“常规”Helvetica Neue,而不是斜体版的“Helvetica Light”。我可以检索
fontDescriptor.fontAttributes
并更新
UIFontDescriptor.AttributeName.name
,但这很棘手,因为每个字体的命名不同(“HelveticaNeue”使用“斜体”,Helvetica使用“斜体”)

let lightFont=UIFont(名称:“HelveticaNeue Light”,大小:16.0)!
var lightFontDescriptor=lightFont.fontDescriptor.withSymbolicTraits([.tratitalic])!
var lightFontWithItalicTraits=UIFont(描述符:lightFontDescriptor,大小:0)
//字体系列:“HelveticaNeue灯”;字体大小:正常;字体风格:普通;字体大小:16.00pt
打印(lightFont)
//字体系列:“Helvetica Neue”;字体大小:正常;字体:斜体;字体大小:16.00pt
打印(带斜体标记的LightFont)
//我期望的字体是:
让lightItalicFont=UIFont(名称:“HelveticaNeue LightItalic”,大小:16.0)!
//字体系列:“HelveticaNeue LightItalic”;字体大小:正常;字体:斜体;字体大小:16.00pt
打印(lightItalicFont)

还有其他办法可以得到现有字体的斜体版本吗?

它不是最漂亮的,但很实用。它处理所有内置的iOS字体

分机:

extension UIFont {
    func italic() -> UIFont? {
        if let italic = UIFont.init(name: "\(self.fontName)-Italic", size: self.pointSize) {
            return italic
        } else if let italic = UIFont.init(name: "\(self.fontName)Italic", size: self.pointSize) {
            return italic
        }
        if let oblique = UIFont.init(name: "\(self.fontName)-Oblique", size: self.pointSize) {
            return oblique
        } else if let oblique = UIFont.init(name: "\(self.fontName)Oblique", size: self.pointSize) {
            return oblique
        }
        var suffixFontName = self.fontName // for font names that have a 2 letter suffix such as ArialMT
        suffixFontName.removeLast(2)
        let suffix = self.fontName.suffix(2)
        if let suffixFontName = UIFont.init(name: "\(suffixFontName)-Italic\(suffix)", size: self.pointSize) {
            return suffixFontName
        }
        if let suffixFontName = UIFont.init(name: "\(suffixFontName)Italic\(suffix)", size: self.pointSize) {
            return suffixFontName
        }
        // no italic, oblique, or mt italic font found
        return nil
    }
}
用法:

    let helveticaNeueLightItalic = UIFont(name: "HelveticaNeue-Light", size: 16.0)!.italic()
    print(helveticaNeueLightItalic)

    let helveticaItalic = UIFont(name: "Helvetica", size: 16.0)!.italic()
    print(helveticaItalic)

    let helveticaLightItalic = UIFont(name: "Helvetica-Light", size: 16.0)!.italic()
    print(helveticaLightItalic)

    let arialMtItalic = UIFont(name: "ArialMT", size: 16.0)!.italic()
    print(arialMtItalic)

    let arialMtBoldItalic = UIFont(name: "Arial-BoldMT", size: 16.0)!.italic()
    print(arialMtBoldItalic)

谢谢,我希望有办法让
UIFontDescriptor
来做这件肮脏的工作。但是你是对的,这就完成了工作,并且有了一些单元测试,它就可以被未来验证了。真的!很乐意帮助:-)
suffixFontName
不是真正的后缀,而是没有后缀的名称,后缀是
foundry
,也可以是前缀(
LT、MT、a、BT、FB、URW
),而不仅仅是两个字母。
    let helveticaNeueLightItalic = UIFont(name: "HelveticaNeue-Light", size: 16.0)!.italic()
    print(helveticaNeueLightItalic)

    let helveticaItalic = UIFont(name: "Helvetica", size: 16.0)!.italic()
    print(helveticaItalic)

    let helveticaLightItalic = UIFont(name: "Helvetica-Light", size: 16.0)!.italic()
    print(helveticaLightItalic)

    let arialMtItalic = UIFont(name: "ArialMT", size: 16.0)!.italic()
    print(arialMtItalic)

    let arialMtBoldItalic = UIFont(name: "Arial-BoldMT", size: 16.0)!.italic()
    print(arialMtBoldItalic)