1

以下を検討してください。段落データが、上部と下部に固定要素を持つ背景画像の上に配置する必要があるビューに送信されています (図 1)。

図1。テキストフローと固定要素を表示する UIView

私の考えでは、これを 4 つのラベル (Fig1.example2) に分割することでした。ここでの質問は、固定高さのラベル 1、2、および 3 ar を指定して、テキストをラベル 1 - 4 に流す方法です。ここでは、ラベル 3 は 4 より前に入力する必要があると想定しているため、添付の図のレイアウトになっています。

誰かが例を使ってこれを行う最善の方法を提案できますか?

ありがとう

4

2 に答える 2

2

もっとお役に立てれば幸いですが、少なくとも正しい方向に向けることはできると思います。

まず、あなたのアイデアは非常に可能性が高いように見えますが、テキスト サイズの計算が多くなり、見苦しく、理想的な結果が得られない可能性があります。私が見ている方法は、文字列の一部を sizeWithFont: でテストするバイナリ検索です。ラベルがそのサイズに収まり、それでも「正しく」見えるものを推測できるようになるまで。次に、実際に文字列を分割して、バラバラに追跡する必要があります...間違っているようです。

iOS 6 (残念ながら今はあなたには当てはまりませんが、他の人にとっての潜在的な利点として投稿します) では、おそらく 1 つの UILabel と NSAttributed 文字列を使用できます。ここで使用するオプションがいくつかあります (私はそれを行っていないので、どれが最適かはわかりません) が、html でページをフォーマットできれば、属性付きの文字列を初期化できるようです。その方法。

ドキュメントから: 初期化メソッド initWithHTML:documentAttributes: および initWithHTML:baseURL:documentAttributes: を使用して、HTML データから属性付き文字列を作成できます。メソッドは、HTML で定義されたテキスト属性を文字列の属性として返します。これらは、「RTF ファイルと属性付き文字列」で説明されているように、NSDictionary オブジェクトへの参照によって、HTML で定義されたドキュメント レベルの属性 (用紙や余白のサイズなど) を返します。メソッドは HTML を可能な限り Cocoa テキスト システムの構造に変換しますが、Application Kit は任意の HTML の完全で真のレンダリングを提供しません。

ここでの代替手段は、画像サイズに応じて行のインデントなどを設定して、利用可能な属性を使用することです。私はこのレベルで属性付き文字列を扱ったことがないので、開発者のビデオと NSAttributedString のプログラミング ガイドが最も参考になります。https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/AttributedStrings/AttributedStrings.html#//apple_ref/doc/uid/10000036-BBCCGDBG

より古いバージョンの iOS では、CoreText に慣れたほうがよいでしょう。最終的には、見栄えの良い結果、再利用性/柔軟性などのメリットが得られます。リストは続きます。そのためには、CoreText プログラミング ガイドから始めます: https://developer.apple.com/library/mac/#documentation/StringsTextFonts/Conceptual/CoreText_Programming/Introduction/Introduction.html

他の誰かがサンプル コードを提供してくれるかもしれませんが、ドキュメントを調べるだけで、そのような 4 つのラベルを計算しようとするよりも頭痛が軽減されると思います。

編集: CoreText のリンクを変更しました

于 2012-10-19T15:55:30.620 に答える
0

CoreText を使用する必要があります。AttributedString と CTFramesetter を作成します。

次に、各テキスト ボックスの CTFrame を取得し、グラフィックス コンテキストで描画できます。

https://developer.apple.com/library/mac/#documentation/Carbon/Reference/CTFramesetterRef/Reference/reference.html#//apple_ref/doc/uid/TP40005105

UIWebView を使用することもできます

于 2012-10-19T18:44:34.797 に答える