【问题标题】:Irregular Font names in When combined with bold and Italic?不规则字体名称何时与粗体和斜体结合使用?
【发布时间】:2013-05-23 13:10:03
【问题描述】:

我正在开发一个“申请表格填写”应用程序,并使用 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

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

【问题讨论】:

    标签: ios ipad uifont


    【解决方案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
        }
    }
    

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

    【讨论】:

    • 第二个选项我感觉不太好,因为有将近 40 个字体系列,所以我计划实现第一个,你创建一个选择器类的计划很酷。
    猜你喜欢
    • 2011-07-18
    • 2011-06-02
    • 2016-11-07
    • 1970-01-01
    • 2016-08-10
    • 2012-12-10
    • 2014-07-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多