我已按照步骤在swift day-by-day和{x}添加xcode中的自定义字体 custom fonts但我无法以编程方式在app标签中设置该字体。
var labeladd = UILabel(frame: CGRectMake(40, 50, 70, 22))
// label.center = CGPointMake(160, 284)
/// labeladd.font=UIFont.boldSystemFontOfSize(15)
labeladd.font = UIFont(name:"Source Sans Pro",size:15)
labeladd.textColor=UIColor.blackColor()
labeladd.textAlignment = NSTextAlignment.Center
labeladd.text = "this is custom fonts"
myview.addSubview(labeladd)
答案 0 :(得分:92)
假设您要添加此字体:SourceSansPro-Regular.otf
三个步骤:
SourceSansPro-Regular.otf
添加到项目中,确保在"添加到目标"中选择目标。
转到目标构建阶段,并确保它位于复制捆绑资源下。如果没有,请添加它。
2.转到目标信息。添加新条目应用程序提供的字体,然后添加一个值为SourceSansPro-Regular.otf
的新项目。
3.打开OS X 字体簿应用程序,导航到您的字体,然后按 Command + i 。请注意 PostScript名称,并在Swift代码中使用该名称。在这种情况下,它是SourceSansPro-Regular
。
所以在你的代码中:
labeladd.font = UIFont(name:"SourceSansPro-Regular", size:15)
答案 1 :(得分:2)
有时字体名称不是文件名称。我试图使用名称为“ NexaBook”的NexaBook.otf字体,最后问题是该字体的正确名称为“ Nexa-Book”。 要检查您使用的名称是否正确,请在viewDidLoad中编写以下代码,然后检查字体的名称:
for family: String in UIFont.familyNames
{
print(family)
for names: String in UIFont.fontNames(forFamilyName: family)
{
print("== \(names)")
}
}
就我而言:
...
Nexa
== Nexa-Book
Avenir Next
== AvenirNext-Medium
== AvenirNext-DemiBoldItalic
== AvenirNext-DemiBold
...
我从Common Mistakes With Adding Custom Fonts to Your iOS App那里得到了这个想法,您可以在其中找到有关使用自定义字体的问题的详尽说明。
答案 2 :(得分:2)
如果要在情节提要中获取字体,而不能在字体家族中获取字体,并且无法通过编程方式进行设置,则原因是Xcode可能未编译字体。要解决它:
答案 3 :(得分:2)
我发现(XCode 12),除非您的字体恰巧已经在Main.storyboard中被使用,否则即使您已完成将字体文件注册到您的所有正确步骤,应用程序,复制到捆绑资源中,使用了PostScript名称yadda,yadda,但该脚本仍未显示,并且尝试在UIFont(name:size :)中使用它仍将返回nil。 :-(
我通过在启动时在AppDelegate应用程序中手动注册我的自定义字体(_ application:didFinishLaunchingWithOptions :)来解决此当前错误(?)
solution1
答案 4 :(得分:0)
答案 5 :(得分:0)
如果要在框架中添加自定义字体,则需要先在应用程序委托中手动加载该字体。
答案 6 :(得分:0)
我在这个问题上苦苦挣扎了很长时间。原来,我忘了在Info.plist中的字体名称上添加.ttf
/ .otf
扩展名。
答案 7 :(得分:0)
按照Apple指南进行操作:
Adding a Custom Font to Your App
除此之外,我发现如果您的字体在情节提要中还不存在,UIFont.familyNames.sorted()不会列出它。
解决方法是制作一个情节提要,您可以保留未使用的状态,并为每个希望以编程方式提供的自定义字体添加一个UILabel,然后从属性面板中将其设置为自定义字体。
这不是干净的解决方案,但我没有找到其他解决方案。
最诚挚的问候。
/ GM