我已设置UITextView
和UILabel
以使用自定义字体。 (它是一个垂直镜像的蒙古语字体,但我还包括英文文本,以便您可以看到效果。)单词显示在Interface Builder中,但在模拟器中UITextView
中的大多数字符都是空的框。奇怪的是,UILabel
中的字符在模拟器中正确显示。
如何让它们也显示在UITextView
中?
UITextView
和UILabel
的自定义字体列表中选择了它。Info.plist
中添加了“应用程序提供的字体”键,并将自定义字体添加到其中。
This question非常相似(但不同,因为它没有提到UITextView
和UILabel
问题)。在撰写本文时,该问题的OP并未表明最高投票答案是否有帮助。我在that answer中运行代码以确认我的字体确实在捆绑中。我得到了以下结果,证实它在捆绑中,所以仍然无法解决我的问题。
Family : ChimeeWhiteMirrored
Font : ChimeeWhiteMirrored
有人看到我的错误或有任何其他想法吗?
收到@ darkheartfelt的downvote和comment到我的答案后,我重新创建了我原来的问题,想想也许我错过了什么。虽然在iOS 9中,字体在模拟器中的显示方式有所不同,但基本问题仍然存在:它在IB中看起来不错,但在模拟器中看起来不行。
问题可以如下重现(使用Xcode 7.1.1):
UITextView
。1-10: one two three four five six seven eight nine ten
这再现了特殊字符的问题,正如我在下面的回答中所描述的那样,我发现解决这个问题的唯一方法就是在代码中设置字体。
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)!)
}
}
如果我错了或遗失了什么,请告诉我。在那之前,我将不得不继续使用我接受的答案。
答案 0 :(得分:24)
看来,当我第一次将字体导入我的项目时,我选择了“添加到目标会员”,在检查字体后,不添加到目标中!它在Interface Builder中运行得很好,但在sim或编译时无效。
在项目文件夹视图中选择字体文件并检查目标成员资格框,修复它:
答案 1 :(得分: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文件的名称添加到属性中的标签。
答案 2 :(得分:1)
Common Mistakes With Adding Custom Fonts to Your iOS App是一个有用的清单,可以让自定义字体正确显示。但是,在这种特殊情况下,这些都不起作用。
除了您在笔记中所做的事情之外,您还需要在代码中设置字体。这样做有几种选择。
这就像执行以下操作一样简单:
myUITextView.font = UIFont(name: "ChimeeWhiteMirrored", size: myUITextView.font.pointSize)
请注意,名称是字体名称,而不是字体文件名称(ChimeeWhiteMirrored.ttf)。
如果您想避免在代码中执行此操作,可以使用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)
}
}
}
然后在视图的标识检查器中添加关键路径,类型和值,如下图所示。
From what I have read,使用用户定义的运行时属性是一种老式的方式。使用IBInspectable(和IBDesignable)允许您在Interface Builder中进行更改并立即查看更改。
答案 3 :(得分: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];