簡體   English   中英

如何將 UIContentSizeCategory 轉換為數字字體比例值?

[英]How can I convert UIContentSizeCategory to a numerical font scale value?

概括

我有我在 SkiaSharp canvas 上繪制的文本,它不會自動調整到 iOS 中的較大可訪問性大小設置。 我想在繪制時根據用戶的設置縮放字體,但我不知道如何將 UIContentSizeCategory 轉換為數值。 有沒有辦法將 UIContentSizeCategory 值轉換為數值?

細節

用戶可以通過轉到設置->顯示和文本大小->更大的文本-> 啟用更大的輔助功能大小並將 slider 向右拖動來更改 iPhone 上的字體比例。

在此處輸入圖像描述

與這個slider匹配的值可以得到如下(在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 中是否有等效值?

我在這里發現了一個類似的問題:

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;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM