ios - 旧金山字体:粗体+斜体?
问题描述
过去,如果我想在同一文本上使用粗体和斜体,我会按名称选择字体,如下所示:
font = [UIFont fontWithName:@"HelveticaNeue-BoldItalic" size:size];
现在我正在尝试使用当前的 iOS 系统字体 San Francisco。这个答案说按名称引用这个字体是不安全的,事实上,当我尝试它时,一些与字体相关的方法什么都不做,有些会导致应用程序崩溃。
当然有boldSystemFontOfSize
anditalicSystemFontOfSize
方法,但是没有boldItalicSystemFontOfSize
方法。
这是否留下任何其他方式来使用旧金山字体的粗体+斜体?
解决方案
这是基于@rmaddy 建议的答案的类别:
@interface UIFont (UIFontBoldItalic)
+ (UIFont *)boldItalicSystemFontOfSize:(CGFloat)fontSize;
@end
@implementation UIFont (UIFontBoldItalic)
+ (UIFont *)boldItalicSystemFontOfSize:(CGFloat)fontSize {
UIFontDescriptor *fontDescriptor = [UIFontDescriptor preferredFontDescriptorWithTextStyle:UIFontTextStyleBody];
uint32_t existingTraitsWithNewTrait = [fontDescriptor symbolicTraits] | UIFontDescriptorTraitBold | UIFontDescriptorTraitItalic;
UIFontDescriptor *updatedFontDescriptor = [fontDescriptor fontDescriptorWithSymbolicTraits:existingTraitsWithNewTrait];
UIFont *font = [UIFont fontWithDescriptor:updatedFontDescriptor size:fontSize];
return font;
}
@end
尽管这没有在任何地方指定“系统字体”或“旧金山”,但我认为UIFontTextStyleBody
它将返回系统字体。
推荐阅读
- awk - 如何从匹配打印到文件末尾?
- sql-server - 在具有 XML 的 cast(text) 列上执行 SELECT 语句
- flutter - 计时器上的嵌入式小部件
- django - 在 django 的 GET 路由的请求头中设置授权令牌
- java - java spring boot应用程序崩溃,除非
- ansible - 如何从 ansible 库存中获取特定组并在剧本中使用它?
- c++ - PKCS#11 使用 Botan 的 std::bad_alloc
- reactjs - 开玩笑的存根方法
- python - 如何使用下拉列表更新多个图形的 y 轴列?
- python - 无法从 Beam 中的 GCS 读取 PubSub gz 文件