1

単一のフォントで描画された文字列を含む単純なカスタム UIView を作成しようとしていますが、最初の文字が少し大きくなっています。

これは、2 つの UILabel: を並べて配置することで簡単に実装できると思いました。

NSString sizeWithFont を使用して文字列を測定し、正しくレイアウトできるようにします。

しかし、返された四角形のフォント ベースラインは、設定したフォント サイズに応じて +/- 1 ピクセルで変化することに気付きました。これが私のコードです:

NSString* ctxt = [text substringToIndex:1];
NSString* ttxt = [text substringFromIndex:1];

CGSize sz = [ctxt sizeWithFont: cfont ];
clbl = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, sz.width, sz.height)];
clbl.text = ctxt;
clbl.font = cfont;
clbl.backgroundColor = [UIColor clearColor];
[contentView addSubview:clbl];

CGSize sz2 = [ttxt sizeWithFont: tfont];
tlbl = [[UILabel alloc] initWithFrame:CGRectMake(sz.width, (sz.height - sz2.height), sz2.width, sz2.height)];
tlbl.text = ttxt;
tlbl.font = tfont;
tlbl.backgroundColor = [UIColor clearColor];
[contentView addSubview:tlbl];

サイズとして 12.0 と 14.0 を使用すると、問題なく動作します。しかし、代わりに 13.0 と 15.0 を使用すると、最初の文字が 1 ピクセル高すぎます。

これは既知の問題ですか?

それを回避する方法はありますか?

CSS と HTML ページを使用して UIWebView を作成するのは、やり過ぎのようです。動的文字列を処理するための作業が増えました。それは私が期待されていることですか?

4

1 に答える 1

1

答えを見つけました...

もちろん、フォントのディセンダー値も確認し、レイアウトでそれを補正する必要があります。

2番目のラベルの新しいrectは次のとおりです。CGRectMake(sz.width、(sz.height --sz2.height)+ floor(cfont.descender --tfont.descender)、sz2.width、sz2.height)

floor()は、ピクセル位置にスナップすることを確認するためのものです。そうしないと、フォントがぼやけて見えます。

于 2010-05-31T18:18:13.423 に答える