web-dev-qa-db-ja.com

iOSの文字間隔

私は次のコードを持っています:

[[cancelButton titleLabel] setFont:[UIFont fontWithName:@"ProximaNova-Regular" size:15]];

文字間隔もどのように設定しますか?

17
David542

抄録の文字間隔を変更することはできません。つまり、iOS 5以下では文字間隔をまったく変更できません。

IOS 6以降では、バニラ文字ではなく属性付き文字列をUILabelにプッシュできます。属性付き文字列をプッシュするプロセスは、通常の文字列をプッシュするプロセスとは少し異なります。つまり、フォント、テキストの色、およびその他の多くのプロパティはすべて、ラベルではなく文字列に設定されます。その理由は、属性付き文字列では、文字列の異なる領域に異なる属性を設定できるためです。したがって、複数のフォント、テキストの色などを組み合わせた文字列を設定できます。

サポートされているコアテキスト属性の1つはkCTKernAttributeNameです。これは、iOS 6以降、UIKitの追加NSKernAttributeNameを利用する方が簡単です。カーニングを使用して、グリフの水平方向の間隔を調整できます。

IOS 5以前では、Core Foundation CスタイルのオブジェクトとObjective-C UIKitオブジェクトの間で多くのメンタルジャンプを行わなければなりませんでした。 6以降、これは不要になりました。ただし、ネットで検索すると、6歳の方がずっと楽になったことに注意してください。__bridgeキャストと手動のCFReleasesを使用すると、おそらく古いコードが表示されます。

とにかく、あなたが現在次のようなものを持っているとしましょう:

UILabel *label = [cancelButton titleLabel];

UIFont *font = <whatever>;
UIColor *textColour = <whatever>;
NSString *string = <whatever>;

label.text = string;
label.font = font;
label.textColor = textColour;

代わりに、次のようなことを行います。

NSAttributedString *attributedString = 
    [[NSAttributedString alloc]
          initWithString:string
          attributes:
              @{
                    NSFontAttributeName : font,
                    NSForegroundColorAttributeName : textColour
              }];

label.attributedText = attributedString;

あなたのケースでは、追加するカーニング全体を調整するためにも:

NSAttributedString *attributedString = 
    [[NSAttributedString alloc]
          initWithString:string
          attributes:
              @{
                    NSFontAttributeName : font,
                    NSForegroundColorAttributeName : textColour,
                    NSKernAttributeName : @(-1.3f)
              }];

label.attributedText = attributedString;

または、適用したいカーニング値。適用できるその他のさまざまな属性と、それらが最初に利用可能になったiOSのバージョンについては、 NSAttributedString UIKit Additions Reference の下部にあるさまざまな定数を参照してください。

ずっと後の補遺:まだ会うことのないスウィフティの中で最も少ない人の1人ですが、これはSwiftでも同等だと思います。

button.titleLabel?.attributedText =
    NSAttributedString(
        string: string,
        attributes:
        [
            NSFontAttributeName: font,
            NSForegroundColorAttributeName: textColour,
            NSKernAttributeName: -1.3
        ])
53
Tommy
    NSAttributedString *cancelButtonAttributedString =[[NSAttributedString alloc]
                                           initWithString:@"Hello"
                                           attributes:
                                           @{
                                             NSKernAttributeName : @(1.5)
                                             }];
    [cancelButton setAttributedTitle:bittonAttributedString forState:UIControlStateNormal];

これは上記の質問に対する単純な答えです

1
Jagveer Singh

サポートされているコアテキスト属性の1つはkCTKernAttributeNameです。これは、iOS 6以降、UIKitの追加NSKernAttributeNameを介して利用する方が簡単です。カーニングを使用して、グリフの水平方向の間隔を調整できます。

カーニングは、2つのユニークな文字間のスペースの調整です。カーニングは、文字のペアによって異なります。たとえば、「AVA」のような組み合わせでは、「VVV」のような組み合わせとは、キャラクター間のカーニングが異なります。

NSKernAttributeNameを使用することで、フォントファイルに組み込まれているカスタムスペース調整を実際にオーバーライドし、さまざまな文字ペアのカーニング値をすべて同じ数に設定して、最適なカーニングを壊します。テキストの文字列全体に適用すると、分割されたスペースのカーニングが少し目立ちます。ただし、カーニング値を高くすると、文字が十分に離れて、不十分な間隔が目立たなくなる点まで文字がプッシュされます。

探しているのはトラッキング(別名文字間隔)です。これは、特定のテキストブロック内のすべての文字間の間隔です。残念ながら、iOSではその属性を制御できません。

1
Payam Rajabi