10

我已经设置了 aUITextView和 aUILabel以使用自定义字体。(它是垂直镜像的蒙古字体,但我还包括了英文文本,以便您可以看到效果。) 文字显示在界面生成器中,但在模拟器中,大多数字符UITextView只是空框。奇怪的是,在UILabel模拟器中确实显示正确的字符。

我如何让它们也显示在其中UITextView

在此处输入图像描述

笔记:

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

    Family : ChimeeWhiteMirrored
        Font : ChimeeWhiteMirrored
    

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

更新

在收到@darkheartfelt 的反对票并在下面对我的回答发表评论后,我重新创建了我原来的问题,以为我可能错过了一些东西。尽管在 iOS 9 中字体在模拟器中的显示有所不同,但基本问题仍然存在:在 IB 中看起来还可以,但在模拟器中却不行。

在此处输入图像描述

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

  1. 开始一个新的单视图项目。
  2. 将字体添加到项目中(可以从相关的 github 项目在这里下载)
  3. 在 Info.plist 文件中添加“应用程序提供的字体”,字体名称为“ChimeeWhiteMirrored.ttf”。
  4. 确认目标的“Copy Bundle Resources”包含 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)!)
    }
}

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

4

4 回答 4

25

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

在项目文件夹视图中选择字体文件并选中目标成员框修复它:

于 2016-01-30T18:15:29.580 回答
1

创建 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 文件的名称添加到属性中的标签。

在此处输入图像描述

于 2015-06-24T06:21:27.723 回答
1

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

除了你在笔记中做的事情,你还需要在代码中设置字体。有几个选项可以做到这一点。

选项1:直接硬编码

这就像执行以下操作一样简单:

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

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

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

如果您想避免在代码中执行此操作,可以使用User Defined Runtime Attributes来完成。感谢@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 中进行更改并立即查看更改。

于 2015-06-27T10:52:08.003 回答
1

如果您使用的是 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];
于 2018-03-29T05:28:59.817 回答