問題タブ [sizewithfont]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
1108 参照

iphone - NSString sizeWithFont: 一貫性のない結果を返しますか? 既知のバグ?

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

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

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

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

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

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

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

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

0 投票する
4 に答える
2779 参照

iphone - Iphone sizewithfont が動かない?

次のコードがあります。

「[currentMessage sizeWithFont:font forWidth:270 lineBreakMode:UILineBreakModeWordWrap].height」が常に null または nil を返す理由を教えてもらえますか?

確認したところ、currentMessage が正しく設定されています。

何か案は?

0 投票する
2 に答える
2138 参照

uilabel - UILabel sizeWithFont: 問題。斜体テキストのクリッピング

単一の大きな文字を表示する UILabel を作成しました。clipsToBounds = NO; でも。私はまだクリッピングを取得します。

リンクを参照してください: http://img341.imageshack.us/img341/5310/screenshot20100814at243.png

次のコードを使用しました。

フォントの外接する四角形を取得します。そして、ラベルは次のように描画されます:

下の画像では、sizeWithFont から返されたサイズが、半透明の青い四角形のオーバーレイによってレンダリングされます。ご覧のとおり、イタリック フォント (この場合は Verdana-BoldItalic) を使用すると、文字は sizeWithFont が返す値を超えて拡張されます。さらに、UILabel のフレーム (オレンジ色) も文字をクリップします。考え?たぶん、テキスト描画ルーチンをオーバーライドできます。また、これがここと同じ問題かどうかはわかりません:

UIButton.titleLabel クリッピング テキストの問題

0 投票する
3 に答える
1961 参照

objective-c - マルチスレッド クラッシュの sizeWithFont!

sizeWithFont がマルチスレッドでクラッシュしました。これはデバッグ情報です:

今、私は NSLock オブジェクトを使用してエラーを解決します。この関数を使用する前に、このオブジェクトをロックし、その後ロックを解除します

しかし、もっと良い解決策があるに違いないと思います!

このエラーは、2 つのスレッドの両方でこの関数の NSString オブジェクトが複数行のテキストである場合にのみ発生することがわかりました

0 投票する
3 に答える
1094 参照

iphone - iPhoneでのUILabelの間違ったサイズ計算

現在、シミュレーターを使用して古いアプリをiPhone 4に調整していますが、UILabelの描画とsizeWithFont:constrainedToSize:で、現在iPhone4シミュレーターでのみ表示される非常に奇妙な動作に遭遇する可能性があります。

次のエラーテキストをユーザーに表示しようとしています:@ "ユーザー名またはパスワードが正しくありません"このテキストは、上部、中央、下部の3つの部分で構成される動的エラーボックス内にあるため、ラベルのサイズを計算しますそれに応じて中央の背景画像フレームを変更できます。

UILabelサイズ計算コードの例を次に示します。

iPhone 3シミュレーターでコードを実行すると、sizeWithFont:constrainedToSize:メソッドは1行の高さを返し、このエラーテキストを1行に描画します。iPhone 4シミュレーターで同じコードを実行すると、sizeWithFont:constrainedToSize:は2行に必要なサイズ(170.0、42.0)を返しますが、ラベル自体は1行に描画されます。これは、sizeWithFontコードがレンダリングコードと同じロジックを使用していないかのようです。

エラーテキストを変更することはできません:)この問題を回避または解決する方法はありますか?

前もって感謝します

0 投票する
3 に答える
2749 参照

iphone - NSString sizeWithFont:constrainedToSize:Retinaディスプレイで誤った高さを返す

sizeWithFont:constrainedToSizeのエッジケースを見つけたと思います。Retinaディスプレイでは、実際に必要な高さよりも1行高く、さらに重要なことに、実際に描画するよりも1行高い高さが返されることがあります(ワードラップに基づいているようです)。 。

注:私が使用している実際のコードは、パフォーマンス中心の手描きの可変高さテーブルビューセルコード内に埋め込まれているため、問題を可能な限り単純なサンプルコードに絞り込みました。(私の質問以外に答えようとするときは、これに注意してください:-)

このサンプルUIViewは、コンテンツを塗りつぶし、収まるようにテキストを測定(折り返し)し、その四角形を塗りつぶしてから、テキストを描画します。

網膜デバイス(またはシミュレーター)では、高さが1行高すぎて返されますが、網膜前デバイス(またはシミュレーター)では、正しい高さが返されます。

それは私が修正したいバグなので、誰かが持っているかもしれない洞察を大いに感謝します!

どうもありがとう!

-エリック

単純なプロジェクト全体はここから入手できます。

シミュレーター画像: http:
//files.droplr.com/files/9979822/aLDJ.Screen%20shot%202011-01-11%20at%2012%3A34%3A34.png http://files.droplr.com/files/ 9979822 / YpCM.Screen%20shot%202011-01-11%20at%2012%3A36%3A47.png

0 投票する
2 に答える
6497 参照

iphone - NSStringのsizeWithFontとdrawInRectを使用して、描画する文字列の量を計算する方法

iOSでCGContextを使用して、画像の複数の「ページ」を描画しています。私は自分のアプリでsizeWithFontとdrawInRectの組み合わせを広範囲に使用しました。私がする必要があるのは、テキストの大きな塊を複数のページに分割することです。サイズを変更して、別のページが必要かどうかを判断できますが、どこで切り刻むかを知るにはどうすればよいですか?ページに完全に適合する文字列の長さが見つかるまで単語ごとにチェックするために醜いループを実行し、その時点で文字列を切り刻む必要がありますか?より賢い方法はありますか?

何か案は?

ありがとう。

0 投票する
3 に答える
1179 参照

iphone - iOSプログラミングに相当するCTFrameGetVisibleStringRange?

CTFrameGetVisibleStringRange のようなメソッドが必要です。このメソッドは、改行モード (つまり、ワード ラップ) で指定されたサイズでレンダリングされるテキストを提供できます。たとえば、長いテキスト行があり、テキストを囲む特定の長方形がありますが、テキストが切り捨てられた場合は、中断した別の領域でレンダリングを続けます。だから私は次のような方法が必要です:

誰にもアイデアはありますか?

**編集済み:私の解決策をご覧ください。

0 投票する
4 に答える
10103 参照

ios4 - iOS のテキストに合わせて CATextLayer のサイズを変更する

これまでの私のすべての調査は、これを正確に行うことは不可能であることを示しているようです。最初に利用できるオプションは次の 2 つだけでした。

a) CATextLayer のレイアウト マネージャーの使用 - 4.0 の時点で iOS では使用できません

b) sizeWithFont:constrainedToSize:lineBreakMode: を使用し、ここで返されたサイズに従って CATextLayer のフレームを調整します。

オプション (b) は最も単純なアプローチであり、うまくいくはずです。結局、UILabels と完全に連携します。しかし、同じフレーム計算を CATextLayer に適用すると、フレームは常に予想または必要より少し大きくなることが判明しました。

結局のところ、(同じフォントとサイズの) CATextLayers と UILabels の行間隔は異なります。その結果、sizeWithFont (行間隔の計算が UILabels の計算と一致する) は、CATextLayers の予想されるサイズを返しません。

これは、CATextLayer に対して UILabel を使用して同じテキストを出力し、結果を比較することでさらに証明されます。最初の行のテキストは完全に重なっています (同じフォントです) が、CATextLayer の行間隔は UILabel よりも少しだけ短くなっています。(申し訳ありませんが、スクリーンショットには機密データが含まれているため、現在スクリーンショットをアップロードできません。現在、クリーンなスクリーンショットを取得するためのサンプル プロジェクトを作成する時間がありません。後世のために後でアップロードします。時間はあります)

これは奇妙な違いですが、そこで使用する NSAttributedString に適切な属性を指定することで CATextLayer の間隔を調整できると思っていましたが、そうではないようです。CFStringAttributes.h を調べると、行間隔に関連する可能性のある単一の属性が見つかりません。

結論:

そのため、レイヤーをテキストに合わせる必要があるシナリオでは、iOS で CATextLayer を使用することはできないようです。私はこれで正しいですか、それとも何か不足していますか?

PS:

  1. CATextLayer と NSAttributedString を使用したかった理由は、表示される文字列が異なるポイントで異なる色で表示されるためです。いつものように手で文字列を描画することに戻る必要があると思います....もちろん、適切な行の高さを取得するために sizeWithFont からの結果をハッキングするオプションが常にあります。

  2. 「コード」タグを少し悪用して、投稿を読みやすくします。

  3. 投稿に「CATextLayer」のタグを付けることができません - 驚くべきことに、現時点ではそのようなタグは存在しません。十分な評判のある誰かがこの投稿に遭遇した場合は、それに応じてタグ付けしてください.

0 投票する
2 に答える
1078 参照

iphone - sizeWithFont:constraintedToSIze:lineBreakMode を使用して NSString のサイズを計算するときの間違った計算

UITextView で構成されるサブビューを持つ UITableViewCell があります。テキストビューの内容は動的なので、正確な幅と高さを測定して、スクロールする必要のないセルとテキストビューを作成したいと考えています。

NSString が占めるサイズを測定するために、次のメソッドを作成しました。

私はこのように使用しています:

しかし、計算された高さが小さすぎても、cellView 内で厄介なスクロールが発生します。ほとんどすべてのテキストに改行 (\n) が含まれていることに注意してください。

ここで何が間違っていますか?

ありがとう