【发布时间】:2015-09-10 04:49:39
【问题描述】:
我设置了UITextView 和UILabel 来使用自定义字体。 (它是一种垂直镜像的蒙古字体,但我还包括了英文文本,以便您看到效果。)在Interface Builder中显示文字,但在模拟器中UITextView中的大部分字符只是空框。奇怪的是,UILabel 中的字符确实在模拟器中正确显示。
如何让它们也显示在UITextView 中?
注意事项:
- 我使用的是 Xcode 版本 6.3.2。从this SO Q&A 我知道自定义字体应该在 IB 中与 Xcode 6 一起使用。
- 我已将我的字体文件添加到项目中,并从
UITextView和UILabel的自定义字体列表中选择它。 - 我在项目的
Info.plist中添加了“应用程序提供的字体”键,并向其中添加了我的自定义字体。 -
This question 是一个非常相似的(但不同,因为它没有提到
UITextView和UILabel问题)。在撰写本文时,该问题的 OP 尚未表明投票最多的答案是否有帮助。我在that answer 中运行代码以确认我的字体确实在捆绑包中。我得到了以下结果,它确认它在捆绑包中,所以仍然不能解决我的问题。Family : ChimeeWhiteMirrored Font : ChimeeWhiteMirrored
有没有人看到我的错误或有其他想法?
更新
在收到@darkheartfelt 的反对票和comment 对我下面的回答后,我重新创建了我原来的问题,以为我可能错过了一些东西。尽管在 iOS 9 中字体在模拟器中的显示有所不同,但基本问题仍然存在:在 IB 中看起来还可以,但在模拟器中却不行。
问题可以重现如下(使用Xcode 7.1.1):
- 开始一个新的单视图项目。
- 将字体添加到项目中(可以从相关的github项目中下载here)
- 在 Info.plist 文件中添加“应用程序提供的字体”,字体名称为“ChimeeWhiteMirrored.ttf”。
- 确认目标的“Copy Bundle Resources”包含 ChimeeWhiteMirrored.ttf。
- 将
UITextView添加到情节提要。 - 在 IB 属性检查器中粘贴以下文本:
1-10: one two three four five six seven eight nine ten - 在 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)!)
}
}
如果我错了或遗漏了什么,请告诉我。在此之前,我将不得不继续使用下面我接受的答案。
【问题讨论】:
-
这是解决这个问题的完美的遍历:codewithchris.com/…
-
毫无疑问,当前的 iOS/Xcode (2017) 存在缺陷。 有时您必须在 plist 中包含字体文件名,有时您不必这样做。这是一个错误。
-
@Fattie,感谢您的链接。将来我将在我想要制作的框架中再次重新审视这一点,这将是一个有用的参考。
标签: ios xcode fonts interface-builder mongolian-vertical-script