[英]Custom built font displays properly when set in IB but not when set programmatically
[英]Custom font displays in IB but not in simulator
我已经设置了UITextView
和UILabel
来使用自定义字体。 (它是一个垂直镜像的蒙古语字体,但我还包括英文文本,以便您可以看到效果。)单词显示在Interface Builder中,但在模拟器中, UITextView
中的大多数字符只是空框。 奇怪的是,在UILabel
中的字符中,可以在模拟器中正确显示。
如何让它们在UITextView
显示?
UITextView
和UILabel
的自定义字体列表中选择它。 Info.plist
添加了“应用程序提供的字体”键,并将自定义字体添加到其中。 这个问题非常相似(但不同,因为它没有提到UITextView
和UILabel
问题)。 在撰写本文时,该问题的OP并未表明最高投票答案是否有帮助。 我在那个答案中运行了代码,以确认我的字体是否真的在捆绑中。 我得到了以下结果,它确认它在捆绑中,因此仍然无法解决我的问题。
Family : ChimeeWhiteMirrored Font : ChimeeWhiteMirrored
有没有人看到我的错误或有任何其他想法?
收到@ darkheartfelt的downvote并评论下面的答案后,我重新创建了我原来的问题,想想也许我错过了什么。 虽然在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)!)
}
}
如果我错了或遗失了什么,请告诉我。 在那之前,我将不得不继续使用我接受的答案。
看来,当我第一次将字体导入我的项目时,我选择了“添加到目标成员资格”,在检查字体后,它没有添加到目标中! 它在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应用程序添加自定义字体的常见错误是一个有用的清单,可以让自定义字体正确显示。 但是,在这种特殊情况下,这些都不起作用。
除了您在笔记中所做的事情之外,您还需要在代码中设置字体。 这样做有几个选择。
这很简单,只需执行以下操作:
myUITextView.font = UIFont(name: "ChimeeWhiteMirrored", size: myUITextView.font.pointSize)
请注意,名称是字体名称,而不是字体文件名(ChimeeWhiteMirrored.ttf)。
如果要避免在代码中执行此操作,可以使用“ 用户定义的运行时属性”执行此操作 。 感谢@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)
}
}
}
然后在视图的标识检查器中添加键路径,类型和值,如下图所示。
根据我的阅读 ,使用用户定义的运行时属性是一种古老的方式。 使用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.