1

我正在开发一个“申请表填写”应用程序,并使用 xml 创建表单。

在 xml 中,如果我找到像下面这样的标签,我会将 UIlabels 添加为 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

如果我对粗体和斜体表示“是”,我的问题会进一步恶化

例如,如果是 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

是否有任何补救措施可以将所需的字体名称与字体系列分开//无需担心字体名称

4

1 回答 1

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

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

于 2013-05-28T14:32:32.830 回答