如何在 Xamarin Forms iOS 中显示带有小型大写字体样式的标签?
Posted
技术标签:
【中文标题】如何在 Xamarin Forms iOS 中显示带有小型大写字体样式的标签?【英文标题】:How to display a label with small caps font style in Xamarin Forms iOS? 【发布时间】:2018-01-16 17:26:58 【问题描述】:我的 Xamarin Forms 应用程序设计师为标签字段指定了 Small Caps。在 Xamarin for android 中有几个关于如何执行此操作的讨论,但我找不到任何适用于 ios 的内容。
我知道我需要一个自定义渲染器,并且在 here 上找到了很好的讨论,但在将那篇文章中的 Swift 代码转换为 Xamarin iOS 的 C# 时遇到了挑战。
代码如下:
let systemFont = UIFont.systemFont(ofSize: 24.0, weight: UIFontWeightLight)
let smallCapsDesc = systemFont.fontDescriptor.addingAttributes([
UIFontDescriptorFeatureSettingsAttribute: [
[
UIFontFeatureTypeIdentifierKey: kUpperCaseType,
UIFontFeatureSelectorIdentifierKey: kUpperCaseSmallCapsSelector
]
]
])
let font = UIFont(descriptor: smallCapsDesc, size: systemFont.pointSize)
我知道我会在我的 OnElementChanged 方法中添加一些东西,但是 FontDescriptor 没有添加属性方法或属性集合,因此在添加其他属性时遇到了挑战。
【问题讨论】:
【参考方案1】:FontDescriptor 没有添加属性方法或属性集合
您正在寻找UIFont.FontDescriptor.CreateWithAttributes
方法。
示例:
var systemFont = UIFont.SystemFontOfSize(24, UIFontWeight.Light);
var attributes = new UIFontAttributes(
new UIFontFeature(CTFontFeatureUpperCase.Selector.UpperCaseSmallCaps),
new UIFontFeature(CTFontFeatureLowerCase.Selector.LowerCaseSmallCaps)
);
var smallCapsDesc = systemFont.FontDescriptor.CreateWithAttributes(attributes);
var font = UIFont.FromDescriptor(smallCapsDesc, systemFont.PointSize);
【讨论】:
适用于 SystemFontOfSize。我使用应用程序使用的自定义字体(Futura LT Medium)进行了尝试,但没有成功。我通过将 systemFont = ... 替换为 systemFont = Control.Font; 来做到这一点。不知道为什么它不起作用,但我会选择有效的方法!谢谢! @SteveReedSr 并非所有字体都启用了小型大写字母 Open Type 属性,而且我个人不确定 Futura LT Medium(第 3 方字体?)。我会尝试使用不同的字体来检查您的代码(尝试fonts.google.com/specimen/Roboto,因为我知道它有效,var font = UIFont.FromName(@"Roboto", 20);
然后将小写字母 UIFontAttributes 应用到它),如果它没有以小写字母显示,请发布另一个问题.. .以上是关于如何在 Xamarin Forms iOS 中显示带有小型大写字体样式的标签?的主要内容,如果未能解决你的问题,请参考以下文章
Xamarin Forms Android 项目图像未显示但在 iOS 上正确显示
在 Xamarin Forms iOS 中出现 ListView 之前,如何将 ListView 滚动位置设置为底部?
Xamarin Forms - 防止键盘在 UWP、Android、iOS 中的条目焦点上显示
Xamarin Forms (iOS) - 从选取器中删除快捷方式栏