問題タブ [nslayoutmanager]
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.
cocoa - Swift プロトコル: メソッドはそのスーパークラスのメソッドをオーバーライドしません
Xcode 6 にはまだ Swift に関する多くのバグがあるため、それが 1 つなのか、それとも何かが欠けているのかはわかりません。私のクラスはプロトコル NSLayoutManagerDelegate を採用しています。しかし、必要なメソッドをオーバーライドすることは不可能のようです。ドキュメントの説明どおりに行います。
しかし、ここでエラーが発生します。メソッドはスーパークラスのメソッドをオーバーライドしません。私は何をすべきか?
ios - iOSはタップされた文字を検出します
こんにちは、次の文字列を指定しました。
文字列に TapGestureRecognizer を追加し、ユーザーがタップした文字を検出したい場合は、次のコードを使用します。
常に最後の文字のインデックスを返します (この状況では = 14 ) - なぜですか?
ios - NSLayoutManager でテキスト サイズを計算する
私は TextKit フレームワークを使用して、次のような列にテキストをタイプセットするビューに取り組んでいます:
UIView
の境界をエッジ インセット (黒い四角形) で使用して 10 を計算し、それを(赤い四角形)CGRects
に変換します。NSTextContainers
で、グリフをタイプセットして描画する にdrawRect:
それらを渡します。NSLayoutManager
私の質問は次のとおりです。必要な列の数を計算するにはどうすればよいですか? 一定数の列を描画できますが、テキストの長さが変化するため、列の数をプログラムで調整する必要があります。
[NSLayoutManager glyphRangeForTextContainer:]
テキスト コンテナを空のままにしておくと、長さ 0 の範囲を返すメソッドが見つかりました。したがって、ループしてテキスト コンテナーを作成し、このメソッドを使用してさらにコンテナーが必要かどうかを判断することができます。ただし、この方法はレイアウト計算をトリガーするため非効率的であると言われています。おそらく何百回もループして実行するのは好ましくありません。
もっと良い方法があるはずです!
答えてくれてありがとう、ピート。
ios7 - iOS 8 の UITextView でこの不要なコンテンツ インセットが発生する原因は何ですか (iOS 7 にはありません)?
UITextView
iOS 7 で、自動レイアウトを使用して、プログラムで sを作成してきました。次のようなものです。
作成した他の制約に加えて、テキスト ビューの下部に次の制約があります。
キーボードが表示されたときに制約を変更できるように:
それはすべてうまくいっています...
問題
私は Xcode 6 と iOS 8 に切り替えたばかりです (遅く、私は知っています) UITextView
。例 (テキストビューの背景は黄色):
インセットの原因は何ですか?と に接続されNSTextContainer
ていtextContainerInset
ますか?
- iOS 7以降での作業と
NSTextContainer
正しい使用方法はありますか?textContainerInset
UITextView
- iOS 8でそのようにする必要がありますか?
はいの場合、必要なandUITextView
とともにプログラムで a を作成するためのガイダンスをいただければ幸いです。その後設定。(プログラムで自動レイアウトを使用します)。NSTextContainer
NSLayoutManager
textContainerInset
ありがとう。
ios - NSTextContainer でテキストを取得する
NSString コンテンツを含む段落の NSOrderedSet があります。すべてをループすると、大きな文字列が作成され、NSTextStorage が与えられます。しかし、それですべての段落が失われます。
以下のコードを使用すると、ページを数えてコンテンツをページ単位で表示できます。しかし、コンテンツを段落に分けて、ユーザーが特定の段落をいつタップしたかを知りたいです。
NSTextStorage を使用して、コンテンツを単一の大きな文字列としてではなく、小さなテキスト ブロックのコレクションとして表示するにはどうすればよいですか? 注: UIPageViewController を使用してコンテンツを表示しているため、ページごとの段落数も知る必要があります。
ありがとう。
ios - NSLayoutManager のテキスト ストレージを置き換える方法
UITextView を持つテーブル ビュー セルを作成しようとしています。このテーブル ビュー セルを再利用するために、新しいテキスト ストレージをレイアウト マネージャーに設定します。ただし、レイアウト マネージャーを新しいテキスト ストレージに追加しても、テキスト ビューのテキスト ストレージは変更されません。
レイアウト マネージャー、テキスト コンテナー、テキスト ビューは次のように設定されます。
テーブル ビュー セルを「構成」するときに、レイアウト マネージャーを新しいテキスト ストレージに追加します。
これは今のところ機能しており、新しいテキストが正しく表示されます。しかし、セルを再利用して (レイアウト マネージャーを別のテキスト ストレージに追加して)、テキスト ビューのサイズを取得すると、…</p>
… 間違ったサイズを取得します。テキスト ビューのプロパティを調べたところ、まだ間違ったテキスト ストレージを指していることがわかりました。
これは本当に奇妙に感じます。スタック全体 (レイアウト マネージャー、テキスト コンテナー、テキスト ビュー) を再度セットアップする必要がありますか?
はいの場合、新しいテキスト ビューを開始し、レイアウトの制約も更新する必要がありますが、これには非常にコストがかかります。
ios - NSLayoutManager でレイアウトを確保する
たくさんのテキストを含む UITextView があります。スクロールは、iPhone 4、5、および 6 ではほぼスムーズですが、6 Plus では多くのカクつきがあります。(これは、押し出さなければならないピクセルの量に対して 6 Plus のパワーが不足しているためだと思います)。ある領域をスクロールすると、その領域をスクロールして戻ると、スクロールがスムーズに行われることに気付きました。領域のレイアウトは既に実行されており、プロセッサは多くのことを行う必要はありません。リージョンに到達する前にレイアウトを強制したい。これは私が試したものです:
これはまったく何もしていないようです。領域の最初のパスではまだスクロールがスムーズではなく、前後のログ ステートメントには 0.00014 秒の差があります。本当に正しいテキスト コンテナーを取得していることを確認するために、次のことも試しました。
これも違いはありませんでした。
テキスト コンテナ内のすべてのテキストを強制的にレイアウトするにはどうすればよいですか?
どんな助けでも大歓迎です。
ありがとう。
追加するために編集: TheCodingArt の質問に答えるには: レイアウト マネージャーの点でエキゾチックなことは何もしていません。これは私のセットアップコードです:
テキストコンテナーとテキスト ストレージを明示的にインスタンス化して追加することは、この質問に対する最初の回答から学んだことです 。
後で、テキストを追加します。