Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/95.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何从常规UIFont创建粗体UIFont?_Ios_Ios5_Uikit - Fatal编程技术网

Ios 如何从常规UIFont创建粗体UIFont?

Ios 如何从常规UIFont创建粗体UIFont?,ios,ios5,uikit,Ios,Ios5,Uikit,如果我有一个UIFont对象,是否可以将其转换为粗体?我不知道字体名称,我只有一个UIFont对象。我想要的是这样的函数 UIFont *boldFontFromFont(UIFont *input) { return [input derivedFontWithFontWeight:UIFontWeightBold]; } 如何更改代码以使其正常工作。(上面的代码不起作用,我只是编出来说明这一点。) 提前感谢。要获得粗体字体,您需要从字体系列中传递字体的特定名称。您可以从给定字体中获

如果我有一个
UIFont
对象,是否可以将其转换为粗体?我不知道字体名称,我只有一个UIFont对象。我想要的是这样的函数

UIFont *boldFontFromFont(UIFont *input)
{
    return [input derivedFontWithFontWeight:UIFontWeightBold];
}
如何更改代码以使其正常工作。(上面的代码不起作用,我只是编出来说明这一点。)


提前感谢。

要获得粗体字体,您需要从字体系列中传递字体的特定名称。您可以从给定字体中获取字体系列名称,然后列出该系列中的所有字体。通常,粗体字体的名称中会包含“粗体”,但格式并不严格,例如,可能会有类似“Helvetica BoldLoxel”的变体。您可以从以下代码开始:

- (UIFont *)boldFontFromFont:(UIFont *)font
{
    NSString *familyName = [font familyName];
    NSArray *fontNames = [UIFont fontNamesForFamilyName:familyName];
    for (NSString *fontName in fontNames)
    {
        if ([fontName rangeOfString:@"bold" options:NSCaseInsensitiveSearch].location != NSNotFound)
        {
            UIFont *boldFont = [UIFont fontWithName:fontName size:font.pointSize];
            return boldFont;
        }
    }
    return nil;
}
你可以使用

[UIFont boldSystemFontOfSize:12].
如果使用自定义字体,则必须直接使用名称

[UIFont fontWithName:@"Helvetica-Bold" size:17.0].
您可以使用查找可能的字体名称

[UIFont fontNamesForFamilyName:@"American Typewriter"].
在这篇文章中:Ben M想到了如何动态地获得粗体版本。但是扩展该方法以确保获得粗体版本(如果存在的话),因为还有其他粗体版本,如CondencedBold。

iOS 7引入了一个新类,这使它更容易:

UIFont *font = [UIFont fontWithName:@"Helvetica Neue" size:12];
NSLog(@"plain font: %@", font.fontName); // “HelveticaNeue”

UIFont *boldFont = [UIFont fontWithDescriptor:[[font fontDescriptor] fontDescriptorWithSymbolicTraits:UIFontDescriptorTraitBold] size:font.pointSize];
NSLog(@"bold version: %@", boldFont.fontName); // “HelveticaNeue-Bold”

UIFont *italicFont = [UIFont fontWithDescriptor:[[font fontDescriptor] fontDescriptorWithSymbolicTraits:UIFontDescriptorTraitItalic] size:font.pointSize];
NSLog(@"italic version: %@", italicFont.fontName); // “HelveticaNeue-Italic”

UIFont *boldItalicFont = [UIFont fontWithDescriptor:[[font fontDescriptor] fontDescriptorWithSymbolicTraits:UIFontDescriptorTraitBold | UIFontDescriptorTraitItalic] size:font.pointSize];
NSLog(@"bold & italic version: %@", boldItalicFont.fontName); // “HelveticaNeue-BoldItalic”

对于到这里来寻找Cocoa(macOS)等价物的人来说,
UIFontDescriptor
来自于
NSFontDescriptor
,从10.3开始提供。

由于系统字体的字体家族名称晦涩难懂,尝试使用字体或家族名称导出粗体/斜体字体自iOS 7以来不再正常工作。下面是使用UIFontDescriptor类派生粗体/斜体字体的简单扩展

+(UIFont *) font:(UIFont *)font bold:(BOOL)bold italic:(BOOL)italic
{
    NSUInteger traits = 0;
    if (bold)
    {
        traits |= UIFontDescriptorTraitBold;
    }
    if (italic)
    {
        traits |= UIFontDescriptorTraitItalic;
    }
    return [UIFont fontWithDescriptor:[[font fontDescriptor] fontDescriptorWithSymbolicTraits:traits] size:font.pointSize];
}

如果您正在寻找快速实施

let normalFont = UIFont(name: "FONT_NAME", size: CGFloat(20))!
let boldFont = UIFont(descriptor: normalFont.fontDescriptor.withSymbolicTraits(.traitBold)!, size: normalFont.pointSize)

希望这有帮助!干杯

当您在Swift中搜索粗体UIFonts时,会弹出这个问题,下面是一个新的答案:

扩展UIFont{ ///返回同一系列中具有给定符号特征的新字体, ///如果在系统中找不到,则为“nil”。 具有符号属性的func(u特征:UIFontDescriptor.SymbolicTraits)->UIFont{ guard let描述符Withtraits=fontDescriptor.withSymbolicTraits(traits) else{return nil} 返回UIFont(描述符:描述符Withtraits,大小:0) } } 例如:

myFont.withSymbolicTraits(.taitBold)//返回myFont的粗体版本

这是一个非常古老的线程,但现在可能有人对如何在Swift 5中实现这一点感兴趣

像这样简单:

var font: UIFont = UIFont.systemFont(ofSize: 18)
if let newDescriptor = font.fontDescriptor.withSymbolicTraits(.traitBold) {
    font = UIFont(descriptor: newDescriptor, size: font.pointSize)
}

嗯,有一个问题:对于systemFont,您有familyName=“.Helvetica NeueUI”,而fontNames数组是空数组:-/@Michael我已经尝试过
UIFont*boldFont=[self-boldFontFromFont:[UIFont-systemFontOfSize:12.0]。NSLog输出为:
font系列:“Helvetica BoldClose”;字体大小:粗体;字体:斜体;字体大小:12px
好的,你用的是ios6吗?因为我用的是iOS5。可能是ios6中的字体系统发生了变化?我在iOS5和ios6模拟器上都得到了相同的结果。在模拟器上,它也适用于我。但在设备上却没有。你也在设备上测试过吗?@BB9z:真的吗?这个问题来自2013年。我们是否应该在5年后,因为别人又问了类似的问题而现在关闭它作为复制品?我错了。新的问题应该关闭。@BB9z:或者,我们让这两个问题都存在?2013年不存在UIFont.systemFont(of size:weight:)方法。技术一直在变化。我的问题是“生活在2013年,我如何从目标C中的常规UIFont创建粗体UIFont?”-另一个问题是“生活在2018年,我如何在Swift中为UILabel设置特定的字体权重”-如果你这样说的话,那就不太一样了。@BB9z:还有,从字体名称和字体权重创建具有特定权重的字体对象与希望从现有字体对象创建具有不同权重的字体不同。当问题过于急切地以重复的形式结束时,我会感到困扰,仅仅因为它们90%相似。这对任何人都没有帮助。这里指出了一个好的观点:系统字体和其他字体不完全一样。