2013-02-13 16 views
5

私はthis questionに似た問題がありますが、より複雑です。私はそうのように、日付ラベル右上とバッジの下の権利を持っているテーブルビューセル内のテキストを描画しようとしている:右上と右下にオブジェクトの周りを流れるテキストをどのように描画しますか?

+-----------------------+----+ 
| 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| 
+----------------------+-----+ 

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

これも可能ですか?そうであれば、どのようにテキストを描くのですか。どのくらいの高さになるのでしょうか?

答えて

3

すべてが長方形であり、幅が固定されているように見えます。いくつかのスターターコードについては、ColumnViewを参照してください。

は、ここで私はそれを攻撃する方法は次のとおりです。

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

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

1

私はそれに送られたテキストに基づいてサイズ自体へのポップアップボックスを取得しようとして長い時間のためにこれで苦労。通常、幅は固定されており、高さを計算しようとしています。ここでは開発者向けドキュメント内の記事があります: http://sheepsystems.com/sourceCode/sourceStringGeometrics.html

がさえきちんとセルのサイズを変更することができるという、テキストボックスの形状を変更:https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/TextLayout/Tasks/StringHeight.html

は、私がここで見つかった再利用可能なカテゴリの良いセットもありますセルに日付とバッジを上書きし、その周りにテキストの流れがあるのは簡単な作業ではありません。テーブルセルのデザインを変更することで、自分自身を少しでも簡単にすることができます。このようなもの:

関連する問題