如何修改字体属性以使字体在iOS中成比例?

时间:2014-03-13 16:38:57

标签: ios fonts uifont

我在视频上有一个正在运行的计时器,格式为0:00:00。我希望字符1-9都具有相同的宽度,以便标签在定时器更新时不会移动。我从苹果幻灯片中提取了这段代码,但我没有运气。除了" 1"之外,每个角色似乎都是成比例的。我很难找到有关此问题的任何示例或文档。我在UILabel上使用下面方法的返回值调用setFont。我尝试使用的字体是GothamNarrow-Book。我传入@" GothamNarrow-Book"这个方法。

-(UIFont*) getProportionalFontForTimerWithFont:(NSString*)fontName WithRatio:(CGFloat) fontRatio{
    UIFont *const existingFont=[UIFont fontWithName:fontName];
    UIFontDescriptor *const existingDescriptor=[existingFont fontDescriptor];

    NSDictionary *const timeFeatureSettings=@{
                                         UIFontDescriptorFeatureSettingsAttribute:@[
                                                 @{

                                                     UIFontFeatureTypeIdentifierKey: @(kNumberSpacingType),
                                                     UIFontFeatureSelectorIdentifierKey:@(kProportionalNumbersSelector)
                                                     },
                                                 @{
                                                     UIFontFeatureTypeIdentifierKey: @(kCharacterAlternativesType),
                                                     UIFontFeatureSelectorIdentifierKey:@(1)
                                                     }]
                                         };

    UIFontDescriptor *const proportionalDescriptor=[existingDescriptor fontDescriptorByAddingAttributes:timeFeatureSettings];
    UIFont* proportionalFont=[UIFont fontWithDescriptor:proportionalDescriptor size:[existingFont pointSize]];

    return proportionalFont;

}

3 个答案:

答案 0 :(得分:2)

我误解了比例意味着什么。将密钥从比例更改为等宽函数修复了我的问题。

-(UIFont*) getProportionalFontForTimerWithFont:(NSString*)fontName WithRatio:(CGFloat) fontRatio{
    UIFont *const existingFont=[UIFont fontWithName:fontName];
    UIFontDescriptor *const existingDescriptor=[existingFont fontDescriptor];

    NSDictionary *const timeFeatureSettings=@{
                                         UIFontDescriptorFeatureSettingsAttribute:@[
                                                 @{

                                                     UIFontFeatureTypeIdentifierKey: @(kNumberSpacingType),
                                                     UIFontFeatureSelectorIdentifierKey:@(kMonospacedNumbersSelector)
                                                     },
                                                 @{
                                                     UIFontFeatureTypeIdentifierKey: @(kCharacterAlternativesType),
                                                     UIFontFeatureSelectorIdentifierKey:@(1)
                                                     }]
                                         };

    UIFontDescriptor *const proportionalDescriptor=[existingDescriptor fontDescriptorByAddingAttributes:timeFeatureSettings];
    UIFont* proportionalFont=[UIFont fontWithDescriptor:proportionalDescriptor size:[existingFont pointSize]];

    return proportionalFont;

}

答案 1 :(得分:0)

由于您总是画出固定数量的字符,为什么不只是手动定位和绘制每个字符?你甚至可以让每个人拥有自己的UILabel或其他控件。

答案 2 :(得分:0)

第一步:固定标签

只需使用自动布局固定高度和宽度以及右下角。这样可以确保您的标签不会移动。

第二步:修改字体

在storyboard中,将UILabel的自动收缩属性设置为最小字体比例。然后设置你想要的%大小,你应该很高兴。