問題タブ [nstextcontainer]
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 - 改行モードが有効になっている NSLayoutManager でグリフの正しいポイントを取得する
で選択した文字の実際のポイントを取得しようとしていますNSTextContainer
:
そして、それは正常に機能し、によって設定された最初の改行まで
すべてのハイフンはインデックスを 1 ポイント移動しglyphIndexForPoint
、間違ったインデックスを取得します。改行モードを有効にして正しいインデックスを取得するには?
ios - UITextView から垂直線を削除し、DALinedTextView の左側から入力したテキストを削除するにはどうすればよいですか?
DALinedTextView
裏地に使用していUITextView
ます。赤い縦線を消し、左側から文字を打ちたい。これどうやってするの。前もって感謝します。
ios - 新しい改行を削除する UITextView の NSLineBreakByTruncatingTail
属性付き文字列に複数の改行が含まれている attributedText を持つ UITextView があります。
textView の textContainer の lineBreakMode を NSLineBreakByTruncatingTail に設定しました。
textView の textContainer にも最大行数があります。
問題は、textView の 8 行目が改行であり、文字行ではない場合に発生します。textContainer は、改行を削除して次の行の文字に置き換えることで切り詰めます。
lineBreakMode を設定しながら新しい行を保持するにはどうすればよいですか?
ios - NSLayoutManager のベースラインを揃える際の問題
UIView
多数の個別のNSLayoutManager
オブジェクトを使用してテキストをレンダリングするカスタムを開発しています。(このビューには、組み込みのテキスト ビュー クラスがサポートできる以上のテキスト配置要件があります。) レイアウトされているテキストがヘブライ語の場合、レイアウトの 1 つの正しい垂直位置を取得するのに苦労しています。この投稿が長くなってしまったことをお詫びしますが、できるだけ関連する詳細を含めたかったのです。
問題
これが私が達成しようとしていることの例です:
"2" のベースラインは、ヘブライ文字 "ek" (カスタム フォントで表示) のベースラインとうまく一致しています。ただし、「2」のテキストをヘブライ数字 (実際には、数値コンテキストで値 2 を持つヘブライ文字「ב」) に切り替えると、次のようになります (「ב」が高すぎる場合)。
ここでの唯一の変更は、テキスト文字列です。ではなく、"2"
です"\u{05b1}"
。すべてが共通のベースラインにあることを望み、問題を修正するための提案をいただければ幸いです (これは だけでなく、すべてのヘブライ語の数字で発生します"\u{05b1}"
)。
コード
NSLayoutManager
(技術的な理由から、数字と本文の両方に1 つの数字を使用することはできません。) 数字のレンダリング位置をフォントのアセントの違いだけ垂直方向にシフトすることで、ベースラインを揃えようとしています。シフトを計算するコードは次のとおりです。
NSLayoutManager
番号の作成方法は次のとおりです。
後で、次を使用してテキストをレンダリングします。
本文は同じロジックを使用して処理されますが、ロジックは使用されませんoffset
(もちろんフォントは異なります)。これは、アラビア数字 (例: "2") ではうまく機能しますが、ヘブライ数字 (例: "ב") では失敗します。
さらに詳しい情報
上の画像の場合、フォント サイズ ( .pointSize
) とアセント ( .ascender
) のプロパティは次のとおりです。
サイズ: テキスト = 14.3890409469604 ; 数 = 8.63342465753425
上昇: テキスト = 16.159567469731 ; 番号 = 8.2203017979452
また、レイアウトに関するいくつかの診断情報も生成しますが、その数値はあまり意味がありません。情報を出力するコードは次のとおりです。
2 つのテキスト ("2" と "\u{05d1}") の結果は次のとおりです。
label: 2
text size: (5.3958904109589, 10.3027782534247)
bounds: (0.0, 0.0, 5.3958904109589, 10.3027782534247)
label: ב
text size: (4.67931616438356, 9.19459726027397)
bounds: (-1.88208657534247, -0.578439452054793, 9.5054005479452, 9.77303671232876)
このパズルについていくつかのことが私を困惑させます:
- ヘブライ語のテキストの境界は、x と y の負の値から始まります。負の x 原点は、ヘブライ語が右から左へのスクリプトであることと関係があるかもしれませんが、負の y 原点はどうですか?
- 報告されるレイアウトのサイズは、境界の高さと境界の y 開始点、または (おそらくより正確には) コンテナー内のテキストの下部の代数的合計であり、実際の全体のサイズではありません。
NSAttributedString.size()
壊れていますか? - 「2」と「\u{05d1}」の垂直位置の視覚的な違いを説明する数字はないようです。
ios - デキューされたセル UITextView で attributedText を更新すると、アプリがフリーズします
今、大きな壁にぶち当たっています…
カスタム画像を含むカスタムUITableViewCell
を使用しています。UITextView
NSTextAttachment
それぞれNSTextAttachment
が
と
NSTextAttachmentContainer
プロトコルから。
ここでの目標は、さまざまなサイズの画像を表示し、境界を使用可能なスペースに合わせることです。
sizeThatFits
また、キャッシュする前に、専用セルのステートメントを使用してセルの高さを計算する必要があります。
特定の一連のコンテンツをリストしようとした今日まで、すべてがうまくいきました。
古いセルをデキューして新しいセルを表示すると、アプリがスタック内の[_textView setAttributedString:myAttributedText];
ステートメントでフリーズするだけです。[NSATSTypesetter beginLineWithGlyphAtIndex:]
私は、無駄に(実際には機能する)毎回セルを再作成することを避けるためにあらゆることを試みました。
これが私が見つけたものです:
- セルの高さの値を「ハードコード」して返しても、問題は残ります。
- 境界を変更
NSTextAttachment
する (およびセルの高さを維持する) と、ロジックなしでバグが消えるようです... - セルの高さを変更してデキューが後で発生するようにすると、すべてが正常に機能するため、これは明らかにコンテンツの悪魔の組み合わせです。実際、関連する 2 つのセルには、1 つの画像のみを含むテキストが含まれています。
- メソッドを見て
- (void)prepareForReuse
、状態をリセットしようとしましたがUITextView
、これも無駄でした。 UITextView
セルがデキューされるたびに新しいものを再作成すると、問題が解決するようです。
何か案が?NSTextAttachmentContainer
デキューシステムやプロトコルについて何か重要なことを知る必要がありますか?
よろしくお願いします。
編集: この問題を解決するために私が見つけた唯一のことは、それを行うことです:
ここでのsizeToFit
声明は本当に重要です!