不正确的字体名称与粗体和斜体结合使用时?

时间:2013-05-28 14:03:47

标签: ios ipad uifont

我正在开发一个'应用程序表单填充'应用程序,我使用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" .../>

看起来像

enter image description here

我对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 //无需担心字体名称

1 个答案:

答案 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
    }
}

某些字体可能不遵循标准命名(如果有的话),因此您必须特别处理它们。