我正在开发一个'应用程序表单填充'应用程序,我使用xml创建表单。
在xml中,如果我找到如下所示的标签,我会将UI标签添加为subView
<label x="" y="" width="" height="" text="First Name" textcolor="" font="Arial" Bold="NO" Italic="NO" .../>
<label x="" y="" width="" height="" text="Last Name" textcolor="" font="TimesNewRoman" Bold="NO" Italic="NO" .../>
看起来像
我对UIButtons,滑块,UItextFields等使用相同的方法 (注意: - 尽可能像我遇到的标签一样动态创建UI对象)
我的问题是将字体应用于他们, 例如,在第一个标签中,我收到字体名称Arial,因此如果我使用方法
创建字体 NSString *fontName;
//......getting font name from attribute 'font'.....
[UIFont fontWithName:fontName size:20];
显然,无法设置所需的字体,因为普通arial字体的名称是 ArialMT
为了克服这个问题,我必须在最后添加MT,但是如果我追加,那么我将被困在第二个标签中,即“ TimesNewRoman ”并且TimesNewRoman的正常字体是的 TimesNewRomanPSMT
我的问题变得更加严重如果我对Bold和Italics得到肯定
例如,如果是TimesNewRoman-'PS'后缀为'TimesNewRoman','MT'出现在字体名称中的连字符之后。
TimesNewRomanPS-BoldItalicMT
TimesNewRomanPS-BoldMT
TimesNewRomanPS-ItalicMT
TimesNewRomanPSMT
如果是Arial,则成员
Arial-BoldItalicMT
Arial-BoldMT
Arial-ItalicMT
ArialMT
除此之外在某些字体中使用术语'倾斜'代替斜体,如下所示
字体系列: - Courier
Courier
Courier-Bold
Courier-BoldOblique
Courier-Oblique
是否有任何补救方法可以从字体系列中分离所需的fonttname //无需担心字体名称
答案 0 :(得分:1)
字体没有粗体,斜体或倾斜属性。字体必须用粗体或斜体设计。
您可以创建一个对象来管理您的字体。它将接受基本字体名称,您可以添加粗体或斜体属性。举个例子:
FontPicker *fontPicker = [FontPicker alloc] init];
fontPicker.fontName = @"Helvetica";
fontPicker.bold = YES;
fontPicker.italic = YES;
fontPicker.size = 17;
UIFont *font = [fontPicker font];
这将返回@“Helvetica-BoldOblique”。您需要根据基本字体名称和属性管理实际选择的字体。
我可以想到两种实现方法。一个是硬盘每个基本字体和每个属性:
- (UIFont *)font
{
if ([_fontName isEqualToString:@"Helvetica"]) {
if (_bold && _italic) {
return [UIFont fontWithName:@"Helvetica-BoldOblique" size:_size];
}
if (_bold) {
return [UIFont fontWithName:@"Helvetica-Bold" size:_size];
}
}
}
或者,您可以获得一个系列的所有字体列表,然后检查Bold,Oblique,W6的名称
NSArray *array = [UIFont fontNamesForFamilyName:_fontName];
for (NSString *name in array) {
if (name contains Bold or W6 or Black or Wide after the the "-") {
Create the font
}
}
某些字体可能不遵循标准命名(如果有的话),因此您必须特别处理它们。