iOS上的自定义字体总是使用' regular'样式

时间:2018-03-05 10:56:56

标签: ios swift fonts

我使用自定义字体(BebasNeueLight)。在Font Book中看起来像这样: Font book 我以通常的方式将它添加到iOS项目中;将其复制到项目中,在plist"应用程序提供的字体中添加了一个键#34;并添加了文件名BebasNeueLight.otf)。

在Swift的标签中,我执行以下操作:

label.font = UIFont(name: "BebasNeueLight", size: 24.0)!

这是字体的实际Postscript名称。

当我运行应用程序时,我看到自定义字体已加载;但它显示常规样式(我既没有添加到我的项目或指定): Simulator screenshot 使用'常规'的字体书截图样式: enter image description here 谁看过这个吗?我猜测有些事情是错误的'用字体本身。我在Android btw上运行良好。

- 编辑:

我使用正确的名称,我已经使用fontconfig和Swift代码获取此名称以打印字体(并且它正在加载自定义字体;只是不正确的样式..)。输出:

❯ fc-scan --format "%{postscriptname}\n" BebasNeueLight.otf
BebasNeueLight

-

故事板也会呈现字体“错误”字样。我已选择带有我的标签的字体(因为您可以看到渲染预览): Font in label properties

但是,故事板已经将它呈现为常规'类型(就像应用程序一样): Storyboard preview

所以我认为出于某种原因这是字体本身的问题。

6 个答案:

答案 0 :(得分:0)

我想问题出现在字体名称"BebasNeueLight",在您的应用代表处放置以下功能并调用它:

    func printFonts() {
        let fontFamilyNames = UIFont.familyNames
        for familyName in fontFamilyNames {
            print("------------------------------")
            print("Font Family Name = [\(familyName)]")
            let names = UIFont.fontNames(forFamilyName: familyName)
            print("Font Names = [\(names)]")
        }
    }

然后检查加载的字体系列名称的名称可能是"BebasNeue-Light"

答案 1 :(得分:0)

问题是字体文件名中的“BebasNeueLight”与真实字体标题名称不对应。所以你需要以某种方式找到你的字体名称。其中一个变种是:

func listFontsNames(){
    for family : String in UIFont.familyNames as [String]
    {
        print("Family : \(family)")

        for name in UIFont.fontNames(forFamilyName: family)
        {
            print("name : \(name)")
        }

    }
}

当然你已经在项目和info.plist中添加了字体?

答案 2 :(得分:0)

您可以打印所有字体(见下文)。您还可以检查字体是否存在。

for family in UIFont.familyNames {
        print("\(family)")

        for name in UIFont.fontNames(forFamilyName: family) {
            print("   \(name)") // <- FontName
        }
    }

从日志中复制并粘贴您的字体名称并尝试分配:

label.font = UIFont(name: "<PasteYourFontNameHere>", size: 24.0)!

有时字体名称不同。

答案 3 :(得分:0)

1.将字体文件添加到项目中

2.使用plist文件中的“应用程序提供的字体”添加新条目 您的每个文件,在应用程序提供的字体中将文件名添加到此数组

3。label.font = [UIFont fontWithName:@"BebasNeueLight" size:15];

夫特。

label.font = UIFont(name:"BebasNeueLight", size:15)

答案 4 :(得分:0)

最新的iOS SDK和Xcode(9.3)修复了这个问题,所以我猜这是IOS中的一个错误&lt; 11.3。

当前版本按预期工作:

❯ xcodebuild -showsdks
iOS SDKs:
iOS 11.3                        -sdk iphoneos11.3

该设备还需要至少运行iOS 11.3!

所有其他设置(将字体添加到plist.info,使用正确的postscript字体名称等)都是正确的。

答案 5 :(得分:0)

您是否从xcode等设置了所有内容?如果没有,请按照

进行操作

如果您使用的是webfont,请下载.ttf文件并将其放入您的项目中。如果需要,复制项目上的复选标记

接下来在info plist上添加此内容

PdfDocument pdfDocument = new PdfDocument(new PdfReader(new File("C:\\Users\\me\\lookAtMe.pdf")));
MyImageSeek meeseek = new MyImageSeek(pdfDocument);
for(Map.Entry<Rectangle, BufferedImage> en : meeseek.getImages(1).entrySet())
    System.out.println(en.getKey() + "\t" + en.getValue());

现在看看字体系列名称。您也可以在字体文件中找到。从您下载的地方,您也将到达那里。就像我添加的字体ttf文件名是:Bakersfield Bold.ttf这个字体名称是:Bakersfield-Bold这就是它的快乐编码。

如果您已经完成,请按照以下步骤操作

 <key>UIAppFonts</key>
    <array>
        <string>Your fontname.ttf</string>
        <string>Bakersfield Bold.ttf</string>
   </array>

可能在这里你在字体名称上犯了一个错误。