gpt4 book ai didi

ios - 在 iOS 中检测浅色字体

转载 作者:行者123 更新时间:2023-11-29 12:49:44 25 4
gpt4 key购买 nike

我正在尝试以某种方式指定我的 iOS 应用程序中每个标签的字体系列,以便以后可以很容易地更改它们。我不想通过 Interface Builder 重新设置每个屏幕上的所有字体。根据this post ,我创建了一个方法,可以找到 View 中的所有字体并相应地设置它们。

在我的例子中,根据字体是粗体、斜体还是浅色(例如瘦字体),我需要使用几个不同的字体系列。这些都位于单独的文件中,例如“OpenSans-Semibold.ttf”、“OpenSans-Italic.ttf”和“OpenSans-Light.ttf”。

理想情况下,我希望能够在 Interface Builder 中将字体设置为粗体、斜体或浅色,然后让代码使用适当的 .ttf 文件仅覆盖字体系列。根据this post ,我可以很容易地检测到字体是否已设置为粗体或斜体,但找出它是否为浅色似乎不起作用。

对于浅色字体,“traits”的值为 0x0——因此没有设置标志。还有其他检测浅色字体的方法吗?

代码如下所示:

- (void) setFontFamily:(UIView*)view
{
if([view isKindOfClass:[UILabel class]])
{
UILabel* label = (UILabel*)view;

UIFontDescriptorSymbolicTraits traits = label.font.fontDescriptor.symbolicTraits;
BOOL bold = traits & UIFontDescriptorTraitBold;
BOOL italic = traits & UIFontDescriptorTraitItalic;

if(bold)
[label setFont:[UIFont fontWithName:@"OpenSans-Semibold"size:label.font.pointSize]];
else if(italic)
[label setFont:[UIFont fontWithName:@"OpenSans-Italic"size:label.font.pointSize]];
else if(light)
[label setFont:[UIFont fontWithName:@"OpenSans-Light"size:label.font.pointSize]];
else
[label setFont:[UIFont fontWithName:@"OpenSans"size:label.font.pointSize]];
}

for(UIView* subView in view.subviews)
[self setFontFamily:subView];
}

最佳答案

您根据字体特征确定字体的整个方法是有问题的:

else if(italic)
[label setFont:
[UIFont fontWithName:@"OpenSans-Italic"size:label.font.pointSize]];

您正在根据特征对字体名称进行硬编码。相反,根据名称和特征向运行时询问字体。在这个非常简单的示例中,我发现安装的字体(如果有的话)是 Gill Sans 的斜体变体:

UIFont* f = [UIFont fontWithName:@"GillSans" size:15];
CTFontRef font2 =
CTFontCreateCopyWithSymbolicTraits (
(__bridge CTFontRef)f, 0, nil,
kCTFontItalicTrait, kCTFontItalicTrait);
UIFont* f2 = CFBridgingRelease(font2);

请注意,此代码仅在 iOS 7 中有效,其中 CTFontRef 和 UIFont 相互免费桥接。理论上,无需 C 函数即可通过 UIFontDescriptor 执行此操作,但是我最后一次看它时发现它有问题并且不适用于所有字体(例如 Gill Sans!)。

这就是您应该做的:确定起始字体的符号和粗细特征,然后向运行时询问最符合您要求的字体。

关于ios - 在 iOS 中检测浅色字体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22699690/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com