[英]custom font not working programmatically in swift
我已经按照步骤在 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",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
添加到您的项目中,确保在“添加到目标”中选择您的目标。 转到目标的Build Phases并确保它位于Copy Bundle Resources 下。 如果没有,请添加它。
2. 转到目标的信息。 添加由应用程序提供的新条目Font然后添加具有此值SourceSansPro-Regular.otf
的新项目。
SourceSansPro-Regular.otf
,它可能会要求您将字体安装到您的字体簿。SourceSansPro-Regular
。
所以在你的代码中:
labeladd.font = UIFont(name:"SourceSansPro-Regular", size:15)
有时字体的名称不是您的文件的名称。 我试图使用名为“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
...
我从将自定义字体添加到 iOS 应用程序的常见错误中得到这个想法,您可以在其中找到有关使用自定义字体的问题的详细描述。
我发现(XCode 12)除非您的字体碰巧已在 Main.storyboard 中使用,否则即使您已完成在应用程序中注册字体文件的所有正确步骤,复制到您的捆绑资源,使用PostScript 名称,yadda,yadda,它仍然没有出现并且尝试在 UIFont(name: size:) 中使用它仍然会返回 nil。 :-(
我工作围绕这个电流错误通过手动注册在启动时我所有的自定义字体在AppDelegate中的应用(_应用(?)中:didFinishLaunchingWithOptions :)
let fonts = Bundle.main.urls(forResourcesWithExtension: "ttf", subdirectory: nil)
fonts?.forEach({ url in
CTFontManagerRegisterFontsForURL(url as CFURL, .process, nil)
})
如果您在故事板中获取字体但不在字体系列中并且无法以编程方式设置它,则原因是 Xcode 可能未编译该字体。 要解决它:
我在这个问题上挣扎了很长时间。 原来我忘记在Info.plist中的字体名称中添加.ttf
/ .otf
扩展名。
如果要在框架中添加自定义字体,则需要在使用前手动加载应用程序委托中的字体。
按照苹果指南:
除此之外,我发现如果 Storyboard 项目中还没有您的字体,则 UIFont.familyNames.sorted() 不会列出它。
解决方法是制作一个故事板,您可以不使用,并为您希望以编程方式提供的每个自定义字体添加一个 UILabel,然后从属性面板将您的字体设置为自定义字体。
这不是干净的解决方案,但我没有找到任何其他解决方案。
此致。
/总经理
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.