繁体   English   中英

自定义字体显示在IB中,但不在模拟器中显示

[英]Custom font displays in IB but not in simulator

我已经设置了UITextViewUILabel来使用自定义字体。 (它是一个垂直镜像的蒙古语字体,但我还包括英文文本,以便您可以看到效果。)单词显示在Interface Builder中,但在模拟器中, UITextView中的大多数字符只是空框。 奇怪的是,在UILabel中的字符中,可以在模拟器中正确显示。

如何让它们在UITextView显示?

在此输入图像描述

笔记:

  • 我使用的是Xcode版本6.3.2。 这个SO Q&A我知道自定义字体应该与IB中的Xcode 6一起使用。
  • 我已将我的字体文件添加到项目中,并从UITextViewUILabel的自定义字体列表中选择它。
  • 我在项目的Info.plist添加了“应用程序提供的字体”键,并将自定义字体添加到其中。 在此输入图像描述
  • 这个问题非常相似(但不同,因为它没有提到UITextViewUILabel问题)。 在撰写本文时,该问题的OP并未表明最高投票答案是否有帮助。 我在那个答案中运行了代码以确认我的字体是否真的在捆绑中。 我得到了以下结果,它确认它在捆绑中,因此仍然无法解决我的问题。

     Family : ChimeeWhiteMirrored Font : ChimeeWhiteMirrored 

有没有人看到我的错误或有任何其他想法?

更新

收到@ darkheartfelt的downvote并评论下面的答案后,我重新创建了我原来的问题,想想也许我错过了什么。 虽然在iOS 9中字体在模拟器中的显示方式有所不同,但基本问题仍然存在:它在IB中看起来不错但在模拟器中看起来不行。

在此输入图像描述

问题可以重现如下(使用Xcode 7.1.1):

  1. 启动一个新的单一视图项目。
  2. 该字体添加到项目中(可下载这里从相关github上的项目)
  3. 在Info.plist文件中添加“由应用程序提供的字体”,字体名称为“ChimeeWhiteMirrored.ttf”。
  4. 确认目标的“复制包资源”包含ChimeeWhiteMirrored.ttf。
  5. 在故事板中添加UITextView
  6. 在IB属性检查器中粘贴以下文本: 1-10:           one two three four five six seven eight nine ten
  7. 在“IB属性”检查器中,将字体设置为“自定义”,将族设置为ChimeeWhiteMirrored。

这再现了特殊字符的问题,正如我在下面的回答中所描述的,我发现解决这个问题的唯一方法就是在代码中设置字体。

import UIKit
class ViewController: UIViewController {

    @IBOutlet weak var textView: UITextView!

    override func viewDidLoad() {
        super.viewDidLoad()

        // set custom font
        textView.font = UIFont(name: "ChimeeWhiteMirrored", size: (textView.font?.pointSize)!)
    }
}

如果我错了或遗失了什么,请告诉我。 在那之前,我将不得不继续使用我接受的答案。

看来,当我第一次将字体导入我的项目时,我选择了“添加到目标成员资格”,在检查字体后,它没有添加到目标中! 它在Interface Builder中运行得很好,但在sim或编译时不起作用。

在项目文件夹视图中选择字体文件并检查目标成员资格框是否已修复:

创建2个类别类

-------UILabel+ChimeeWhiteMirrored.h--------------

#import <UIKit/UIKit.h>

@interface UILabel (ChimeeWhiteMirrored)
@property (nonatomic, copy) NSString* fontNamelight;
@property (nonatomic, copy) NSString* fontNamebold;
@property (nonatomic, copy) NSString* fontNameboldIltalic;
@property (nonatomic, copy) NSString* fontNameRegular;
@end

--------------------------------------------
-------UILabel+ChimeeWhiteMirrored.m--------------

 #import "UILabel+ChimeeWhiteMirrored.h"

 @implementation UILabel (ChimeeWhiteMirrored)


 - (NSString *)fontNamelight {
     return self.font.fontName;
 }
 - (NSString *)fontNamebold {
     return self.font.fontName;
 }
 - (NSString *)fontNameRegular {
     return self.font.fontName;
 }

 - (NSString *)fontNameboldIltalic {
     return self.font.fontName;
 }



 - (void)setFontNameRegular:(NSString *)fontName {
     self.font = [UIFont fontWithName:fontName size:self.font.pointSize];
 }

 - (void)setFontNamelight:(NSString *)fontName {
     self.font = [UIFont fontWithName:fontName size:self.font.pointSize];
 }

 - (void)setFontNamebold:(NSString *)fontName {
     self.font = [UIFont fontWithName:fontName size:self.font.pointSize];
 }

 - (void)setFontNameboldIltalic:(NSString *)fontName {
     self.font = [UIFont fontWithName:fontName size:self.font.pointSize];
 }




 @end

--------------------------------------------

并在项目代码文件夹中添加ttf文件,而不是直接将ttf文件的名称添加到属性的标签中。

在此输入图像描述

向您的iOS应用程序添加自定义字体的常见错误是一个有用的清单,可以让自定义字体正确显示。 但是,在这种特殊情况下,这些都不起作用。

除了您在笔记中所做的事情之外,您还需要在代码中设置字体。 这样做有几个选择。

选项1:直接硬编码

这很简单,只需执行以下操作:

myUITextView.font = UIFont(name: "ChimeeWhiteMirrored", size: myUITextView.font.pointSize)

请注意,名称是字体名称,而不是字体文件名(ChimeeWhiteMirrored.ttf)。

选项2:用户定义的运行时属性

如果要避免在代码中执行此操作,可以使用“ 用户定义的运行时属性”执行此操作 感谢@SandeepAgrawal提出这个想法。 请提出他的回答。 适合我的Swift版本是

import UIKit

extension UITextView {

    public var myFontName: String {
        get {
            return self.font.fontName
        }
        set {
            self.font = UIFont(name: newValue, size: self.font.pointSize)
        }
    }
}

然后在视图的标识检查器中添加键路径,类型和值,如下图所示。

在此输入图像描述

选项3:IBInspectable

根据我的阅读 ,使用用户定义的运行时属性是一种古老的方式。 使用IBInspectable(和IBDesignable)允许您在Interface Builder中进行更改并立即查看更改。

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

接下来在info plist上添加它

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

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

UIFont *helvFont = [UIFont fontWithName:@"Bakersfield-Bold" size:14.0];

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM