Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/119.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
Ios 自定义字体在swift中无法以编程方式工作_Ios_Swift_Fonts - Fatal编程技术网

Ios 自定义字体在swift中无法以编程方式工作

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"

我已经按照步骤在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
    添加到项目中,确保在“添加到目标”中选择目标
  • 转到目标的构建阶段,确保它位于复制捆绑资源下。如果没有,请添加它



    2.转到目标的信息。添加应用程序提供的新条目字体,然后添加具有此值的新条目
    SourceSansPro Regular.otf




  • 在finder中,双击文件
    SourceSansPro Regular.otf
    ,它可能会要求您将字体安装到字体手册中


  • 打开OS X字体手册应用程序,导航到您的字体,然后按命令+i。注意PostScript名称,并在Swift代码中使用该名称。在本例中,它是
    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可能没有编译字体。要解决这个问题:

  • 将所需字体(例如:Roboto Bold)设置为故事板上任何UI元素的字体,例如UILabel
  • 运行项目
  • 现在检查字体系列名称。所需的字体(例如:Roboto Bold)名称将出现在其中
  • 现在您可以按程序设置所需的字体(例如:Roboto Bold:)

  • 如果要在框架中添加自定义字体,则需要在使用前在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)
    })