問題タブ [textkit]

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 投票する
4 に答える
2792 参照

ios - iOS 7 の UILabel の切り捨て省略記号を置き換えます

UILabeliOS 7 の a の切り捨て省略記号 ("…") を別の属性文字に置き換えるにはどうすればよいですか? たとえば、色付きの ">" を使用します。

Text KitNSLayoutManagerでこれが可能になることを期待していましたが、UILabel を使用しても公開されないようです。

また、すべてのローカリゼーションで省略記号が切り捨て文字として使用されていると安全に想定できますか? 言語によって切り捨て文字が異なる場合があります。

0 投票する
7 に答える
17423 参照

objective-c - UILabel のタッチポイントでの文字インデックス

の場合UILabel、タッチイベントから受け取った特定のポイントにある文字インデックスを見つけたいと思います。Text Kit を使用して、iOS 7 でこの問題を解決したいと考えています。

UILabel はその へのアクセスを提供しないため、次のような の構成NSLayoutManagerに基づいて独自のものを作成しました。UILabel

上記のコードは、呼び出すように構成されたUILabelサブクラス( Gist ) にあります。UITapGestureRecognizertextTapped:

結果の文字インデックスは理にかなっていますが (左から右にタップすると増加します)、正しくありません (ラベルの幅の約半分で最後の文字に到達します)。フォント サイズまたはテキスト コンテナ サイズが適切に設定されていないようですが、問題が見つかりません。

UILabelを使用する代わりに、自分のクラスを のサブクラスにしたいと本当に思っていUITextViewます。この問題を解決した人はいUILabelますか?

更新:私はこの質問に DTS チケットを費やしました。Apple のエンジニアは、次のコード スニペットのように、独自のレイアウト マネージャーを使用する実装で をオーバーライドすることを推奨しUILabelましdrawTextInRect:た。

自分のレイアウト マネージャーをラベルの設定と同期させるのは大変な作業になると思いUITextViewますUILabel

更新 2:結局使用することUITextViewにしました。このすべての目的は、テキストに埋め込まれたリンクのタップを検出することでした。を使用しようとしましNSLinkAttributeNameたが、このセットアップでは、リンクをすばやくタップしたときにデリゲート コールバックがトリガーされませんでした。代わりに、一定時間リンクを押さなければならず、非常に面倒です。そこで、この問題のないCCHLinkTextViewを作成しました。

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

ios - iOS 7 Text Kit がレイアウト内のテキストをスキップする

新しい iOS 7 Text Kit で奇妙な問題が発生しました。

デモ用に非常に簡単なプログラムを作成しました。1 列に 1 ~ 300 の数字を含むファイルの内容を読み取ります。UITextView のタップに続いて、一度に 1 つの「ページ」のテキストを表示します。(私は単一のビューを持っており、UITextView を削除して、NSTextContainer で作成された新しいビューに置き換え続けています)。

最初のページには 1 ~ 136 の数字が表示されます。2 ページ目は 137 から始まるはずですが、そうではありません。2 ページ目は 155 で始まり、262 で終わります。Text Kit は 18 テキスト行をスキップしました。次に、3 ページ目は 281 から始まり (19 行のテキスト行をスキップ)、残りの数から 300 までを表示します。

誰かがコードを見て、私が欠けているものを教えてもらえますか?

入力ファイルは非常に単純で、次のようになります (スペースを節約するために切り取られています)。

0 投票する
0 に答える
488 参照

ios - UILabelのintrinsicContentSizeを正確な精度で計算する

aとまったく同じサイズboundingRectWithSize:options:attributes:context:を返すにはどうすればよいですか?intrinsicContentSizeUILabel

たとえば、以下のように使用すると、最大 1 ピクセルの差が得られます。

例えば:

のドキュメントにboundingRectWithSizeは次のように書かれています。

iOS 7 以降では、このメソッドは分数のサイズを返します (返された CGRect のサイズ コンポーネントで)。返されたサイズをビューのサイズに使用するには、ceil 関数を使用してその値を最も近い整数に上げる必要があります。

53したがって、との違い52.122002は意味があり、 を使用して処理できますceil。ただし、1 ピクセルの高さの違いはできません。

まったく別のものを使用する必要がありますか?

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

ios - iOS 7 Text Kit: NSLayoutManager が最後の NSTextContainer を満たしたのはいつですか?

Text Kit と UIPageViewController を組み合わせて本を作成しています。元のテキストはテキスト ファイル (.html) に保存され、NSTextStorage に配置されます。

[NSLayoutManager addTextContainer:(NSTextContaner*)txt] メソッドはうまく機能しますが、NSLayoutManager が最後の NSTextContainer をいつ満たしたかを知る方法はありません。次のすべてが表示された後でも NSTextContainer を返し続けるだけです。その結果、NSLayoutManager が完了すると、すべてのバンク ページが取得されます。

[NSLayoutManagerDelegate didCompleteLayoutForTextContainer: atEnd:] コールバック メソッドを使用してみましたが、正しく動作しません。最後の NSTextContainer が満たされたときだけでなく、各 NSTextContainer が満たされた後に atEnd flag = YES を返します。UITextView.scrollable = NO (他の場所で推奨) を設定しましたが、それは役に立ちません。

また、テキストが表示されていないときに UITextView.text を呼び出してテキストを確認しようとしましたが、そのメソッドは常に NSTextContainer/NSLayoutManager の背後にある NSTextStorage 全体の内容を返します。

最後のコンテナがいついっぱいになるかがわからない場合、すべてのページがいつレイアウトされるかわかりません。UITextView をテストして空か NSContainer かどうかを確認する方法、または NSLayoutManager でテキストのレイアウトが完了したことを確認する方法はありますか?

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

ios - タグ/ラベル/テキスト表示を行うには?

このビューのようなことをしたいのですが (名前もわかりません)、最も効率的な (コードの量が最も少ない) 方法でどこから始めればよいかわかりません。

このタグ/ラベル/テキストを、Apple Mail と同じ機能で実行したいと考えています。Facebookメッセンジャーもほぼ同じです。そのための公式の高レベルのパブリック API はありますか? 開始するのに最適な場所はどこですか? テキストキット? UITextInput? 少なくとも抽象的なアルゴリズムを提供してくれますか、それともインスピレーションを与える場所を教えてくれますか?

ここに画像の説明を入力

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

ios - NSLayoutManager で boundingRectForGlyphRange を使用して単語の境界を計算するときに先頭の空白を削除するにはどうすればよいですか

iOS で複数行の文字列を単語境界に分解しています。私のソリューションは、NSLayoutManager の boundingRectForGlyphRange メソッドを中心にしています。各単語の四角形が右に数ピクセルずれていることを除いて、ほとんど機能します。つまり、NSLayoutManager は各行に先行スペース/インデントを追加しているようで、この動作をオーバーライドする方法が見つかりません。

NSLayoutManager.usesFontLeading と NSParagraphStyle.headIndent を使用してみましたが、結果はありません:

ここに画像の説明を入力

スクリーンショット: 灰色の四角形はラベルの境界を表し、赤い四角形は各ラベルのテキスト四角形を表し、上記の [boundingRectForGlyphRange:] メソッドから計算された単語の境界を表します。計算された単語の境界が数ピクセルずれていることに注意してください。

単語境界を計算するための他の方法も受け入れていますが、boundingRectForGlyphRange は私の目的には非常に便利なようです。