5

この質問に似た問題がありますが、より複雑です。次のように、右上に日付ラベル、右下にバッジがあるテーブル ビュー セルにテキストを描画しようとしています。

+-----------------------+----+
| Lorem ipsum dolor sit |DATE|
| amet, consectetur     +----+
| adipiscing elit. Integer   |
| ligula lectus, convallis   |
| non scelerisque      +-----+
| quis, tempor at nibh |BADGE|
+----------------------+-----+

テキストが多かれ少なかれあれば、セルを大きくしたり小さくしたりしたい:

+-----------------------+----+
| Lorem ipsum dolor sit |DATE|
| amet, consectetur     +----+
| adipiscing elit. Integer   |
| ligula lectus, convallis   |
| non scelerisque quis,      |
| tempor at nibh.  Curabitur |
| eget diam ligula.          |
| Pellentesque a elit        |
| dolor, a ullamcorper +-----+
| risus.               |BADGE|
+----------------------+-----+

古い質問への回答は、既知の形状の周りにテキストを流し込む方法を示すプロジェクトにリンクしています。ただし、バッジをテキストの下部に合わせる必要があるため、事前に形状がわかりません。

これは可能ですか?もしそうなら、どのようにテキストを描き、どのくらいの高さになるかをどのように計算しますか?

4

2 に答える 2

3

すべてが長方形で、幅が固定されているように見えるので、あなたのケースはそれほど悪くありません。一部のスターター コードについては、ColumnViewを参照してください。

これが私がそれを攻撃する方法です:

  • 上、中、下の 3 つの長方形があります。上部と下部の寸法は既知です。真ん中だけ縦に伸びます。
  • を作成しますCTFrameSetter。トップ ボックスのパスを作成し、それを配置する を作成CTFrameします。その部分は確かなので、それを握ってください。すべてのテキストが収まっていれば、完了です。
  • トップ ボックスのすぐ下にあるミドル ボックスのパスを作成します。できるだけ短くしてください(テキストが上下のボックスに収まる場合でも、そこにスペースが必要だと思います)
  • 中央のフレームのすぐ下に、下のボックスのパスを作成します。
  • CTFrameSetter中枠と下枠の枠を作成する場合に使用します。レイアウトできたテキストの量を尋ねます。すべてが終了したら、完了です。これは、描画する最小のボックスです。
  • オーバーフローした場合は、中央のボックスのサイズを 1 行増やします。真ん中と下のボックスをもう一度レイアウトしてみてください。合うまで繰り返す。
  • ビュー全体のサイズがわかったので、すべてをレイアウトできます。

そこには最適化する場所がいくつかありますが、おそらく思ったよりも高速です。

于 2013-02-14T01:16:35.353 に答える
1

送信したテキストに基づいてポップアップボックスのサイズを調整しようとして、長い間これに苦労しました。通常、幅は固定されており、高さのみを計算しようとしています。ここの開発者ドキュメントに記事があります: https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/TextLayout/Tasks/StringHeight.html

私がここで見つけた再利用可能なカテゴリの良いセットもあります: http://sheepsystems.com/sourceCode/sourceStringGeometrics.html

セルのサイズを適切に変更したり、テキスト ボックスの形状を変更したり、日付とバッジをセルに重ねたり、セルの周りにテキストを流したりすることは簡単なことではありません。表のセルを再設計して、少し使いやすくすることを検討することをお勧めします。このようなもの:

+-----------------------+----+
| BADGE|                |DATE|
|+-----+      TITLE     +----+
| dolor sit amet, consectetur|     
| adipiscing elit. Integer   |
| ligula lectus, convallis   |
| non scelerisque quis,      |
| tempor at nibh.  Curabitur |
| eget diam ligula.          |
| Pellentesque a elit        |
| dolor, a ullamcorper risus.|
+----------------------------+
于 2013-02-13T19:19:32.047 に答える