いくつかの投稿では、CTFramesetterSuggestFrameSizeWithConstraints から正確な高さを取得することの難しさを指摘しており、ここ(framesetter 投稿)では、@Chris DeSalvo が決定的な修正のように見えるものを示しています: 正しい行間調整で段落スタイル設定を追加します。
DeSalvo は、UIFont のアセンダーとディセンダーを lineHeight から削除することで、「リード」を取得します。と比べてどうだろうと思いましたCTFontGetLeading
。
次のように作成されたフォントを使用しました。
CTFontRef fontr = CTFontCreateWithName((CFStringRef)@"Helvetica Neue", 16.0f, NULL);
UIFont *font = [UIFont fontWithName:@"Helvetica Neue" size:16.0f];
値はかなり異なっていました。
- 0.448 CTFontGetLeading
- 2.360 DeSalvo の式: UIFont lineHeight - アセンダー + ディセンダー
その他の UIFont 値は次のとおりです。
- 21.000 UIFont の lineHeight
- 15.232 UIFont のアセンダー (ベースラインからの Y 座標)
- -3.408 UIFont のディセンダー (ベースラインからの Y 座標)
- 08.368 UIFont の xHeight
Ken Thomases が問い合わせた CTFont 値は次のとおりです。
- 11.568001 CTFontGetCapHeight
- 08.368 CTFontGetXHeight
- -15.216001、-7.696001、38.352001、24.928001 CTFontGetBoundingBox
- 15.232 CTFontGetAscent
- 03.408 CTFontGetDescent (クラス ref は、「フォント参照のポイント サイズとマトリックスに従ってスケーリングされた、スケーリングされた font-descent メトリック」と述べています。これは明らかに、ベースラインからの Y 座標の絶対値であることを意味しますか?)
UIFont には以前は「リーディング」専用のプロパティがありましたが、廃止されたため、lineHeight
代わりに使用することをお勧めします。UIFontは、同じフォントに対してLeading が21であり、CTFontRef .448であると見なしますか? 何かがおかしい。
3 つの質問:
- kCTParagraphStyleSpecifierLineSpacingAdjustment が意味するのは本当に「先頭」ですか?
- もしそうなら、それを得るためにどの方法/式を使用すればよいですか?
- そうでない場合、行間調整には何を使用すればよいですか?