0

概括

我有我在 SkiaSharp 画布上绘制的文本,该画布不会自动调整为 iOS 中的较大可访问性大小设置。我想在绘制时根据用户的设置缩放字体,但我不知道如何将 UIContentSizeCategory 转换为数值。有没有办法将 UIContentSizeCategory 值转换为数值?

细节

用户可以通过转到设置->显示和文本大小->更大的文本-> 启用更大的辅助功能大小并将滑块向右拖动来更改其 iPhone 上的字体比例。

在此处输入图像描述

与此滑块匹配的值可按如下方式获得(在 Xamarin C# 中)

string sizeCategoryAsString = 
    UIKit.UIApplication.SharedApplication.PreferredContentSizeCategory;

var sizeCategoryAsEnum = 
    UIContentSizeCategoryExtensions.GetValue(UIApplication.SharedApplication.PreferredContentSizeCategory);

不幸的是,我看不到将这个枚举值转换为比例值的方法,例如1.5.

我想要一个数值来在单独的渲染系统中乘以我的文本渲染(在这种情况下是 SkiaSharp,但它可以是其他任何东西,比如游戏)。我还需要调整 SkiaSharp 中的布局以适应更大的字体。

我知道这可以在 Xamarin Android 上使用以下代码:

var globalFontScale = Resources.Configuration.FontScale;

Xamarin iOS 中是否有同等价值?

4

1 回答 1

1

我在这里发现了一个类似的问题:

https://social.msdn.microsoft.com/Forums/en-US/5a95e5d6-1263-4ed4-bc03-dd6f54d7df04/accessibility-font-size

不幸的是,那里列出的代码停在ExtraExtraExtraLarge(值 7),但如果用户选中较大的可访问性大小选项,则可以使用较大的“可访问性”值。因此,我进行了自己的测量并得到了这些值。请注意,这些值与上面链接中的值略有不同。

private double SizeEnumToValue(UIContentSizeCategory sizeCategory)
{
    double fontscale = 1;
    switch (sizeCategory)
    {
        case UIContentSizeCategory.ExtraSmall:
            fontscale = 0.882758620689655;
            break;
        case UIContentSizeCategory.Small:
            fontscale = 0.937931034482759;
            break;
        case UIContentSizeCategory.Medium:
            fontscale = 1;
            break;
        case UIContentSizeCategory.Large:
            fontscale = 1.0448275862069;
            break;
        case UIContentSizeCategory.ExtraLarge:
            fontscale = 1.16551724137931;
            break;
        case UIContentSizeCategory.ExtraExtraLarge:
            fontscale = 1.24827586206897;
            break;
        case UIContentSizeCategory.ExtraExtraExtraLarge:
            fontscale = 1.36551724137931;
            break;
        case UIContentSizeCategory.AccessibilityMedium:
            fontscale = 1.64137931034483;
            break;
        case UIContentSizeCategory.AccessibilityLarge:
            fontscale = 1.93793103448276;
            break;
        case UIContentSizeCategory.AccessibilityExtraLarge:
            fontscale = 2.33793103448276;
            break;
        case UIContentSizeCategory.AccessibilityExtraExtraLarge:
            fontscale = 2.77931034482759;
            break;
        case UIContentSizeCategory.AccessibilityExtraExtraExtraLarge:
            fontscale = 2.99310344827586;
            break;
    }
    return fontscale;
}

于 2022-01-11T20:40:12.930 回答