問題タブ [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.

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

cocoa - Swift プロトコル: メソッドはそのスーパークラスのメソッドをオーバーライドしません

Xcode 6 にはまだ Swift に関する多くのバグがあるため、それが 1 つなのか、それとも何かが欠けているのかはわかりません。私のクラスはプロトコル NSLayoutManagerDelegate を採用しています。しかし、必要なメソッドをオーバーライドすることは不可能のようです。ドキュメントの説明どおりに行います。

しかし、ここでエラーが発生します。メソッドはスーパークラスのメソッドをオーバーライドしません。私は何をすべきか?

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

ios - iOSはタップされた文字を検出します

こんにちは、次の文字列を指定しました。

文字列に TapGestureRecognizer を追加し、ユーザーがタップした文字を検出したい場合は、次のコードを使用します。

常に最後の文字のインデックスを返します (この状況では = 14 ) - なぜですか?

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

ios - NSLayoutManager でテキスト サイズを計算する

私は TextKit フレームワークを使用して、次のような列にテキストをタイプセットするビューに取り組んでいます: 列テキストのレイアウト

UIViewの境界をエッジ インセット (黒い四角形) で使用して 10 を計算し、それを(赤い四角形)CGRectsに変換します。NSTextContainersで、グリフをタイプセットして描画する にdrawRect:それらを渡します。NSLayoutManager

私の質問は次のとおりです。必要な列の数を計算するにはどうすればよいですか? 一定数の列を描画できますが、テキストの長さが変化するため、列の数をプログラムで調整する必要があります。

[NSLayoutManager glyphRangeForTextContainer:]テキスト コンテナを空のままにしておくと、長さ 0 の範囲を返すメソッドが見つかりました。したがって、ループしてテキスト コンテナーを作成し、このメソッドを使用してさらにコンテナーが必要かどうかを判断することができます。ただし、この方法はレイアウト計算をトリガーするため非効率的であると言われています。おそらく何百回もループして実行するのは好ましくありません。

もっと良い方法があるはずです!

答えてくれてありがとう、ピート。

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

ios7 - iOS 8 の UITextView でこの不要なコンテンツ インセットが発生する原因は何ですか (iOS 7 にはありません)?

UITextViewiOS 7 で、自動レイアウトを使用して、プログラムで sを作成してきました。次のようなものです。

作成した他の制約に加えて、テキスト ビューの下部に次の制約があります。

キーボードが表示されたときに制約を変更できるように:

それはすべてうまくいっています...

問題

私は Xcode 6 と iOS 8 に切り替えたばかりです (遅く、私は知っています) UITextView。例 (テキストビューの背景は黄色):

ここに画像の説明を入力

インセットの原因は何ですか?と に接続されNSTextContainerていtextContainerInsetますか?

  • iOS 7以降での作業とNSTextContainer正しい使用方法はありますか?textContainerInsetUITextView
  • iOS 8でそのようにする必要があります

はいの場合、必要なandUITextViewとともにプログラムで a を作成するためのガイダンスをいただければ幸いです。その後設定。(プログラムで自動レイアウトを使用します)。NSTextContainerNSLayoutManagertextContainerInset

ありがとう。

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

ios - NSTextContainer でテキストを取得する

NSString コンテンツを含む段落の NSOrderedSet があります。すべてをループすると、大きな文字列が作成され、NSTextStorage が与えられます。しかし、それですべての段落が失われます。

以下のコードを使用すると、ページを数えてコンテンツをページ単位で表示できます。しかし、コンテンツを段落に分けて、ユーザーが特定の段落をいつタップしたかを知りたいです。

NSTextStorage を使用して、コンテンツを単一の大きな文字列としてではなく、小さなテキスト ブロックのコレクションとして表示するにはどうすればよいですか? 注: UIPageViewController を使用してコンテンツを表示しているため、ページごとの段落数も知る必要があります。

ありがとう。

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

ios - NSLayoutManager のテキスト ストレージを置き換える方法

UITextView を持つテーブル ビュー セルを作成しようとしています。このテーブル ビュー セルを再利用するために、新しいテキスト ストレージをレイアウト マネージャーに設定します。ただし、レイアウト マネージャーを新しいテキスト ストレージに追加しても、テキスト ビューのテキスト ストレージは変更されません。

レイアウト マネージャー、テキスト コンテナー、テキスト ビューは次のように設定されます。

テーブル ビュー セルを「構成」するときに、レイアウト マネージャーを新しいテキスト ストレージに追加します。

これは今のところ機能しており、新しいテキストが正しく表示されます。しかし、セルを再利用して (レイアウト マネージャーを別のテキスト ストレージに追加して)、テキスト ビューのサイズを取得すると、…</p>

… 間違ったサイズを取得します。テキスト ビューのプロパティを調べたところ、まだ間違ったテキスト ストレージを指していることがわかりました。

これは本当に奇妙に感じます。スタック全体 (レイアウト マネージャー、テキスト コンテナー、テキスト ビュー) を再度セットアップする必要がありますか?

はいの場合、新しいテキスト ビューを開始し、レイアウトの制約も更新する必要がありますが、これには非常にコストがかかります。

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

ios - NSLayoutManager でレイアウトを確保する

たくさんのテキストを含む UITextView があります。スクロールは、iPhone 4、5、および 6 ではほぼスムーズですが、6 Plus では多くのカクつきがあります。(これは、押し出さなければならないピクセルの量に対して 6 Plus のパワーが不足しているためだと思います)。ある領域をスクロールすると、その領域をスクロールして戻ると、スクロールがスムーズに行われることに気付きました。領域のレイアウトは既に実行されており、プロセッサは多くのことを行う必要はありません。リージョンに到達する前にレイアウトを強制したい。これは私が試したものです:

これはまったく何もしていないようです。領域の最初のパスではまだスクロールがスムーズではなく、前後のログ ステートメントには 0.00014 秒の差があります。本当に正しいテキスト コンテナーを取得していることを確認するために、次のことも試しました。

これも違いはありませんでした。

テキスト コンテナ内のすべてのテキストを強制的にレイアウトするにはどうすればよいですか?

どんな助けでも大歓迎です。

ありがとう。

追加するために編集: TheCodingArt の質問に答えるには: レイアウト マネージャーの点でエキゾチックなことは何もしていません。これは私のセットアップコードです:

テキストコンテナーとテキスト ストレージを明示的にインスタンス化して追加することは、この質問に対する最初の回答から学んだことです 。

後で、テキストを追加します。