問題タブ [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.
ios - iOS 7 の UILabel の切り捨て省略記号を置き換えます
UILabel
iOS 7 の a の切り捨て省略記号 ("…") を別の属性文字に置き換えるにはどうすればよいですか? たとえば、色付きの ">" を使用します。
Text KitNSLayoutManager
でこれが可能になることを期待していましたが、UILabel を使用しても公開されないようです。
また、すべてのローカリゼーションで省略記号が切り捨て文字として使用されていると安全に想定できますか? 言語によって切り捨て文字が異なる場合があります。
objective-c - UILabel のタッチポイントでの文字インデックス
の場合UILabel
、タッチイベントから受け取った特定のポイントにある文字インデックスを見つけたいと思います。Text Kit を使用して、iOS 7 でこの問題を解決したいと考えています。
UILabel はその へのアクセスを提供しないため、次のような の構成NSLayoutManager
に基づいて独自のものを作成しました。UILabel
上記のコードは、呼び出すように構成されたUILabel
サブクラス( Gist ) にあります。UITapGestureRecognizer
textTapped:
結果の文字インデックスは理にかなっていますが (左から右にタップすると増加します)、正しくありません (ラベルの幅の約半分で最後の文字に到達します)。フォント サイズまたはテキスト コンテナ サイズが適切に設定されていないようですが、問題が見つかりません。
UILabel
を使用する代わりに、自分のクラスを のサブクラスにしたいと本当に思っていUITextView
ます。この問題を解決した人はいUILabel
ますか?
更新:私はこの質問に DTS チケットを費やしました。Apple のエンジニアは、次のコード スニペットのように、独自のレイアウト マネージャーを使用する実装で をオーバーライドすることを推奨しUILabel
ましdrawTextInRect:
た。
自分のレイアウト マネージャーをラベルの設定と同期させるのは大変な作業になると思いUITextView
ますUILabel
。
更新 2:結局使用することUITextView
にしました。このすべての目的は、テキストに埋め込まれたリンクのタップを検出することでした。を使用しようとしましNSLinkAttributeName
たが、このセットアップでは、リンクをすばやくタップしたときにデリゲート コールバックがトリガーされませんでした。代わりに、一定時間リンクを押さなければならず、非常に面倒です。そこで、この問題のないCCHLinkTextViewを作成しました。
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 までを表示します。
誰かがコードを見て、私が欠けているものを教えてもらえますか?
入力ファイルは非常に単純で、次のようになります (スペースを節約するために切り取られています)。
ios - UILabelのintrinsicContentSizeを正確な精度で計算する
aとまったく同じサイズboundingRectWithSize:options:attributes:context:
を返すにはどうすればよいですか?intrinsicContentSize
UILabel
たとえば、以下のように使用すると、最大 1 ピクセルの差が得られます。
例えば:
のドキュメントにboundingRectWithSize
は次のように書かれています。
iOS 7 以降では、このメソッドは分数のサイズを返します (返された CGRect のサイズ コンポーネントで)。返されたサイズをビューのサイズに使用するには、ceil 関数を使用してその値を最も近い整数に上げる必要があります。
53
したがって、との違い52.122002
は意味があり、 を使用して処理できますceil
。ただし、1 ピクセルの高さの違いはできません。
まったく別のものを使用する必要がありますか?
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 でテキストのレイアウトが完了したことを確認する方法はありますか?
ios - タグ/ラベル/テキスト表示を行うには?
このビューのようなことをしたいのですが (名前もわかりません)、最も効率的な (コードの量が最も少ない) 方法でどこから始めればよいかわかりません。
このタグ/ラベル/テキストを、Apple Mail と同じ機能で実行したいと考えています。Facebookメッセンジャーもほぼ同じです。そのための公式の高レベルのパブリック API はありますか? 開始するのに最適な場所はどこですか? テキストキット? UITextInput? 少なくとも抽象的なアルゴリズムを提供してくれますか、それともインスピレーションを与える場所を教えてくれますか?
ios - NSLayoutManager で boundingRectForGlyphRange を使用して単語の境界を計算するときに先頭の空白を削除するにはどうすればよいですか
iOS で複数行の文字列を単語境界に分解しています。私のソリューションは、NSLayoutManager の boundingRectForGlyphRange メソッドを中心にしています。各単語の四角形が右に数ピクセルずれていることを除いて、ほとんど機能します。つまり、NSLayoutManager は各行に先行スペース/インデントを追加しているようで、この動作をオーバーライドする方法が見つかりません。
NSLayoutManager.usesFontLeading と NSParagraphStyle.headIndent を使用してみましたが、結果はありません:
スクリーンショット: 灰色の四角形はラベルの境界を表し、赤い四角形は各ラベルのテキスト四角形を表し、上記の [boundingRectForGlyphRange:] メソッドから計算された単語の境界を表します。計算された単語の境界が数ピクセルずれていることに注意してください。
単語境界を計算するための他の方法も受け入れていますが、boundingRectForGlyphRange は私の目的には非常に便利なようです。