Ios 自定义字体在swift中无法以编程方式工作
我已经按照步骤在xcode和中添加了自定义字体 但我无法在应用程序标签中以编程方式设置该字体Ios 自定义字体在swift中无法以编程方式工作,ios,swift,fonts,Ios,Swift,Fonts,我已经按照步骤在xcode和中添加了自定义字体 但我无法在应用程序标签中以编程方式设置该字体 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"
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)
假设您要添加此字体:
SourceSansPro-Regular.otf
四个步骤:
SourceSansPro Regular.otf
添加到项目中,确保在“添加到目标”中选择目标2.转到目标的信息。添加应用程序提供的新条目字体,然后添加具有此值的新条目
SourceSansPro Regular.otf
SourceSansPro Regular.otf
,它可能会要求您将字体安装到字体手册中SourceSansPro-Regular
。
因此,在您的代码中:
labeladd.font=UIFont(名称:“SourceSansPro常规”,大小:15)
(1) 首先选择“字体”文件夹,然后确保已选中 有时字体名称不是文件名。我试着使用名为“NexaBook”的NexaBook.otf字体,最后问题是字体的正确名称是“NexaBook”。 要检查您是否使用了正确的名称,请在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
...
我是从这里了解到这个想法的,你可以找到一个关于使用自定义字体时出现问题的很好的描述。如果你是在故事板中使用字体,而不是在字体系列中使用字体,并且无法按程序进行设置,那么原因是Xcode可能没有编译字体。要解决这个问题:
如果要在框架中添加自定义字体,则需要在使用前在app delegate中手动加载字体
我在这个问题上挣扎了很长时间。事实证明,我忘了在Info.plist中的字体名称中添加
.ttf
/.otf
扩展名。我发现(XCode 12),除非您的字体碰巧已在主.storyboard中使用,否则即使您已完成在应用程序中注册字体文件的所有正确步骤,复制到您的捆绑资源中,使用PostScript名称yadda,yadda,它仍然没有显示,并且尝试在UIFont(名称:size:)中使用它仍将返回nil.:-(
我通过在AppDelegate应用程序(应用程序:didFinishLaunchingWithOptions:)中手动注册启动时的所有自定义字体来解决当前的错误(?)
(改编自)遵循苹果指南:
除此之外,我还发现,如果您的字体尚未出现在故事板项目中,UIFont.familyNames.sorted()将不会列出它
解决方法是制作一个故事板,您可以不使用它,并在其中为您希望以编程方式使用的每个自定义字体添加一个UILabel,然后从“属性”面板将您的字体设置为自定义字体。
这不是干净的解决方案,但我没有找到任何其他解决方案
致以最良好的祝愿
/GM请帮助我,我找不到我的错误或错误之处。你是否将自定义字体添加到info.plist文件中?离题:你是如何为示例代码添加颜色的?这真的很有帮助。我没有在.plist文件中的字体名称末尾添加扩展名。哇,字体手册部分为我修复了它。没有意识到PostScript名称会有所不同。Cheerri也没有意识到我需要使用PostScript名称。在使用后,它立即生效。谢谢!在您的查找程序中,双击哲学家-Regular.ttf,它可能会要求您将字体安装到字体手册中。非常详细但简单的解释,我过去害怕以编程方式使用字体,但现在不再如此。谢谢ot.调试字体名称的好方法,我缺少了“W03”在CirceRoundedW03-Regular中。每个步骤都是正确的,但我在日志列表中找不到字体系列。在故事板中找不到,无法通过编程设置。步骤1解决了我的问题。我尝试了所有其他方法。你知道为什么吗?仍然不清楚为什么2020年需要这样做,但它确实可以正确加载字体。复制到捆绑->检查目标t->checked info.plist->checked copy bundle resources->仍然无法在日志中找到字体系列。没有人对在日志列表中找不到字体的情况发表评论。@Anees您是否也无法按照给定的步骤在字体系列中获得字体?此解决方案对meWow有效,这是一个多么奇怪的错误。otf和.ttc是我的案例,它很有帮助D
let fonts = Bundle.main.urls(forResourcesWithExtension: "ttf", subdirectory: nil)
fonts?.forEach({ url in
CTFontManagerRegisterFontsForURL(url as CFURL, .process, nil)
})