如何从UIFontTextStyle字体样式中获取Light字重字体?
解决UIFontTextStyle获取Light字重失败的问题
我太懂这种挫败感了——明明照着文档或者社区示例改了字重,结果出来的还是Normal字重的字体,确实挺闹心的。问题出在你直接修改原UIFontDescriptor的属性上,因为UIFontDescriptor是不可变对象,你直接改它的Traits根本不会生效,得通过创建新的descriptor来实现。
给你贴个能跑通的正确写法:
// 1. 先拿到对应文本样式的偏好描述器 var baseDescriptor = UIFontDescriptor.GetPreferredDescriptorForTextStyle(UIFontTextStyle.Caption2); // 2. 构建包含Light字重的特性字典 var lightTraits = new UIFontTraits { Weight = (float?)UIFontWeightConstants.Light }; var traitsDict = new NSDictionary(UIFontDescriptor.TraitsAttribute, lightTraits.Dictionary); // 3. 基于原描述器,合并新特性生成新的描述器(核心步骤!) var lightDescriptor = baseDescriptor.CreateCopy(traitsDict); // 4. 用新描述器创建目标字体 var font = UIFont.FromDescriptor(lightDescriptor, 0);
额外提醒两点:
- 不可变对象特性:
UIFontDescriptor一旦创建就没法直接修改属性,必须用CreateCopy()传入新属性字典生成新实例,你的字重设置才会真正被应用。 - 字体可用性限制:如果系统对应文本样式的默认字体本身没有Light字重,系统会自动回退到最接近的可用字重(比如Normal),这种情况下你可能需要确认是否有支持Light字重的替代字体可选。
试试上面的代码,应该就能拿到你想要的Light字重字体了。
内容的提问来源于stack exchange,提问作者Softlion
相关产品推荐
相关产品推荐

