1

カスタム フォントを使用するときに、IOS アプリで数値を強制的にモノスペースにすることができるようになったと思いました。例を見つけてコンパイルするコードを使用しましたが、数値の間隔はまだ比例しています。誰かがこれを機能させましたか?もしそうなら、私は何を間違っていますか?!

これが私のコードです:

UIFont bigNumberFont = UIFont.FromName("Dosis-Light", 60f);

var originalDescriptor = bigNumberFont.FontDescriptor;
var attributes = new UIFontAttributes(new UIFontFeature(CTFontFeatureNumberSpacing.Selector.MonospacedNumbers),
            new UIFontFeature((CTFontFeatureCharacterAlternatives.Selector)0));

var newDesc = originalDescriptor.CreateWithAttributes(attributes);

UIFont bigNumberMono = UIFont.FromDescriptor(newDesc, 60f);

lbCurrentPaceMinute.Font = bigNumberMono;

私のカスタム フォントは正常にレンダリングされますが、まだ数字の間隔を制御することはできません。どんな提案でも大歓迎です!

4

1 に答える 1

2

まず、あなたのコードはフォントを等幅にしていません。

等幅モードで数字をレンダリングするようにフォントを微調整しています。したがって、すべての数字は同じ幅になります。

以下は 4 つのラベルの例です。1 つは Docis Light、2 番目は調整した Docis Light、3 番目は同じサイズのシステム フォント、4 番目は調整したシステム フォントです。

iOSでの等幅数字フォントの微調整

ご覧のとおり、Docis Light は調整なしですぐに等幅数字機能をサポートしています。

等幅フォントを使用する必要がある場合は、カスタムの等幅フォント (等幅になるように設計されています) を使用するか、Courier や Menlo などの組み込みの iOS 等幅フォントを使用する必要があります (利用可能なすべての iOS フォントについては、http://iosfonts.comを参照してください)。 / )

これは、同じシナリオでどのように見えるかです:

courier および menlo 等幅 iOS フォント

微調整の有無にかかわらず、それらはすでに等幅であり、その数字も等幅です。

最後に、等幅数字フォントが必要な場合 (コードで行うこと)、代替文字を微調整する必要はありません。したがって、コードは次のようになります。

public static class UIFontExtensions
{
    public static UIFont MonospacedDigitFont(this UIFont font)
    {
        var originalDescriptor = font.FontDescriptor;
        var monospacedNumbersFeature = new UIFontFeature(CTFontFeatureNumberSpacing.Selector.MonospacedNumbers);
        var attributes = new UIFontAttributes(monospacedNumbersFeature);
        var newDescriptor = originalDescriptor.CreateWithAttributes(attributes);
        return UIFont.FromDescriptor(newDescriptor, font.PointSize);
    }
}

お役に立てれば!iOS でフォ​​ントを微調整できる方法と微調整できない方法を詳細に掘り下げるのは興味深いと思いました。

于 2016-10-14T05:00:34.267 に答える