問題タブ [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 でレイアウトを確保する
たくさんのテキストを含む UITextView があります。スクロールは、iPhone 4、5、および 6 ではほぼスムーズですが、6 Plus では多くのカクつきがあります。(これは、押し出さなければならないピクセルの量に対して 6 Plus のパワーが不足しているためだと思います)。ある領域をスクロールすると、その領域をスクロールして戻ると、スクロールがスムーズに行われることに気付きました。領域のレイアウトは既に実行されており、プロセッサは多くのことを行う必要はありません。リージョンに到達する前にレイアウトを強制したい。これは私が試したものです:
これはまったく何もしていないようです。領域の最初のパスではまだスクロールがスムーズではなく、前後のログ ステートメントには 0.00014 秒の差があります。本当に正しいテキスト コンテナーを取得していることを確認するために、次のことも試しました。
これも違いはありませんでした。
テキスト コンテナ内のすべてのテキストを強制的にレイアウトするにはどうすればよいですか?
どんな助けでも大歓迎です。
ありがとう。
追加するために編集: TheCodingArt の質問に答えるには: レイアウト マネージャーの点でエキゾチックなことは何もしていません。これは私のセットアップコードです:
テキストコンテナーとテキスト ストレージを明示的にインスタンス化して追加することは、この質問に対する最初の回答から学んだことです 。
後で、テキストを追加します。
ios - カスタム UIBezierPath を NSTextContainer に合わせる方法
私はこのリンクのメソッドを使用しています: UILabel の円にテキストを合わせる方法
元の方法を使用すると、[UIBezierPath bezierPathWithOvalInRect:r];
うまく機能します。しかし、独自の UIBezierPath を描画して置き換えると、機能しません。while ループは永遠に続きます。以下は、(A) カスタム UIBezierPath 描画と (B) デフォルトの UIBezierPath 楕円形のスクリーンショットです: http://i.imgur.com/n74BHjX.png
ios - NSTextContainer の除外パスはテキストとともに移動します
exclusionPaths
カスタムビューを 内に実装しUITextView
、ページアプリのようにテキスト編集中にテキストで移動しようとしています。
カスタムビューが必要な場所に のカスタム属性を追加しようとしており、 の後にカスタム属性を使用してattributedText
更新しています。
ユーザーが改行を入力すると問題が発生します。ユーザーが画像の前に改行文字を押すと、カスタム属性が下にあり、原点が間違った場所にあるため、使用しています。exclusionPaths
boundingRectForGlyphRange
textViewDidChange
exclusionPaths
exclusionPath
y
boundingRectForGlyphRange
何か案は?
編集: 問題は、UITextView
ストーリーボード/xib からの読み込み中の Apple のバグでした。iOS 7 の UITextView の改行がテキスト キットの除外ゾーンのラッピングを壊すのに役立ちました。置換テキストが "\n" の場合、shouldChangeTextInRange の除外パスを調整しています。
ios - タップから UILabel の文字のインデックスを取得する
UILabel でタップされた文字のインデックスを取得したいと思います。UILabel をサブクラス化しました。私のawakeFromNib()にはこれがあります:
最初の文字をタップし、touchesEnded で 0 のインデックスを取得するように、ラベルの最初の 5 文字に対して希望どおりに機能しています。
var touchedCharacterIndex = layoutManager.characterIndexForPoint(touch.locationInView(self), inTextContainer: textContainer, fractionOfDistanceBetweenInsertionPoints: nil)
しかし、UILabel の最初の 4 文字を超えてどこかをタップすると、4 または 0 が返されますが、これは正しくありません。
ありがとう、
アップデート
コメントの提案から、私はこれを追加しました:
、 、layoutSubviews()
、、awakFromNib
のセッターでこれを呼び出します。bounds
frame
attributedText
text
そして、テキストの長さが21の場合、最初の文字をタップすると6になるなど、奇妙なインデックスが表示されます.
ios - UITextViewの境界を変更している間、TextContainerはサイズ変更されません
textView のサイズを変更した後、textContainer を textView と同じサイズにしたい (テキストをサイズ変更した textView と同じ幅にしたい)。したがって、私が現在行っていることは、UITextView
プログラムで作成し、(textView 内のテキストの有無にかかわらず) 境界を変更して textView のサイズを変更しますが、textContainer は同じサイズのままです (テキストは textView よりも小さい四角形にあり、見栄えが悪い)。
ここにいくつかのコードがあります:
以降:
現在、なぜ機能しないのか、解決策が見つからないのか、私には考えがありません。