問題タブ [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.
ios - UITextView の contentSize の変更と iOS7 の NSLayoutManager
問題:状況によっては、UITextView
静かに変更さcontentSize
れます。
大きなテキストとキーボードを備えた最も単純なケースの textView。UITextView アウトレットを追加して、次のように設定する- viewDidLoad
だけです。
キーボードを表示および非表示にすると、場合によってはテキスト ジャンプが発生するようになりました。
サブクラスでジャンプする理由がわかりましたUITextView
。私のサブクラスの唯一のメソッドは次のとおりです。
またcontentSize
、キーボードを非表示にすると、縮小と拡大が表示されます。このようなもの:
の動作はUITextView
iOS7 で大幅に変更されたようです。そして今壊れているものもあります。
さらに発見するlayoutManager
と、textView の新しいプロパティも変更されることがわかりました。ログに興味深い情報がいくつかあります:
そして contentSize = {320, 885}
containsの次の行Layout tree contents: ..., 2127 laid glyphs, 51 laid line fragments
。そのため、ある種の自動レイアウトがキーボード ショーで textView を再レイアウトしようとし、レイアウトがまだ完了していなくても contentSize を変更するようです。また、キーボードの表示/非表示の間で textView が変更されていなくても実行されます。
問題は、contentSize の変更を防ぐ方法です。
ios - セル内の UITextView を編集するときに、iOS 7 の UITableView が正しい位置にスクロールしない
静的セルを含むテーブル ビューがあります。1 つのセルには a が含まれてUITextView
おりheightForRowAtIndexPath:
、セルが常にテキストを収容するのに十分な高さになるように、 が動的に計算されます (iOS 7 では、実際には、textView にその を単純に要求することができなくなったため、その部分に多少の作業が必要でしたcontentSize
)。
テキストビュー内をタップして編集を開始すると、キーボードが所定の位置にアニメーション化し、これを考慮して tableView の contentInsets が自動的に調整され (つまり、iPhone の縦向きの場合は下部インセットが 216px)、カーソル/キャレットが表示され、次に、テーブル ビューが別の場所にスクロールします。バウンスのように見えてしまいます。
これは、シミュレーターでのビデオです: https://www.dropbox.com/s/htdbb0t7985u6n4/textview-bounce.mov
キャレットがキーボードのすぐ上にあることに注意してください。私はテーブルビューをログに記録しており、contentOffset
それが適切な値までスクロールし、突然「向きを変えて」スクロールバックするのを見ることができます。
奇妙なことに、シミュレーターで遅いアニメーションをオンにすると、問題はなくなります。contentOffset
反転は起こらず、期待どおりに動作します (つまり、iOS 6 の動作) 。
遅いアニメーションのビデオは次のとおりです: https://www.dropbox.com/s/nhn7vspx86t4exb/textview-nobounce.mov
実装上の注意:
- テキスト ビューはピンク色で、距離 0 のセルにピン留めする AutoLayout 制約があります (10 ポイントの左側を除く)。
boundingRectWithSize:
lineFragmentPadding と上下のインセットを調整して、テーブルビューの高さを計算するために使用しています。うまくいくようです。- textView をスクロールできないように設定しましたが、
scrollEnabled
== YESの場合に違いはありませんでした - これはテーブルビューコントローラーであり、
automaticallyAdjustsScrollViewInsets
== YES
ios - NSLayoutManager の描画をアニメーション化する
NSLayoutManager
次のコードを使用してテキストを描画している があります。
私の見解では-drawRect:
。これは素晴らしく機能しますが、私が実際にできるようにしたいのは、入力されているかのように、テキストを文字ごとにアニメーション化することです。
「可視文字列」変数に文字を追加してから を呼び出そうとしました-[self setNeedsDisplay]
が、約 20 文字を超えるテキストを処理すると、毎回すべてのテキストが再描画されるため、遅れが生じ始めます。
回帰: をアニメートするにはどうすればよいNSLayoutManager
です-drawGlyphsForGlyphRange:atPoint:
か?
ios - NSTextStorage サブクラスの viewController の layoutManager を設定するときの無効なグリフ インデックス
私の目標は、TextKit を使用して、特定の単語の斜体化、テキスト サイズの設定などを行うことです。
まず、テキスト文字列内の文字を強調表示しようとしています。私は TextKit (そして正直なところプログラミング全般) に慣れていないので、obc.io issue #5 の構文強調トピックに従っています。
作成した UITextView に組み込まれている NSLayoutManager を使用すると、例外がスローされずにテキストが画面に表示されます。UITextView をビュー コントローラー (下記) の NSTextStorage サブクラスのレイアウト マネージャーとして設定すると、無効なグリフ インデックスの例外のエラーが発生します。
コンソール出力は次のとおりです。
Apple のテキスト プログラミング ガイドを何度も読み、テキスト システムがどのように確立されているかを理解していると思いますが、グリフ数がグリフ数を超える理由がわかりません...
viewController と NSTextStorage サブクラスの gist をそれぞれhereとhereに作成しました。
ios - プログラムでインスタンス化された UITextView (NSTextContainer で初期化) では、.text プロパティは常に nil です。
[下のセクションに解決策と動作コードを記載して更新]
-viewDidLoad では、initWithFrame を割り当てます。
myTextView を subView に追加する
いくつかの基本的なプロパティを設定します (配置、背景色、テキストの色など)
デフォルトのテキストを設定
.text は表示されません。myTextView が表示され (背景色で示されます)、ブレークポイントが設定され、フレーム、メモリなどが含まれます。すべてが正しく表示されます。myTextView は良さそうですが、.text は nil です。変更、設定、更新します。.text が何であれ、nil のままです。
ドキュメントを何度も読み返しました。私がしていないことについては何も言及されていません。私は途方に暮れています。ヘルプ。
@interface MyController () で...
全部(弱)だったのを念のため(強)に上げてみた。サイコロはありません。
ビューでDidLoad...
[更新: 解決策]
NSTextContainer で UITextView を割り当て/初期化するときは、.text を貼り付けるために NSLayoutManager と NSTextStorage を個別に初期化する必要もあります。
これが更新された作業コードです
ios - Core Text を使用した境界長方形
私が間違っている場合は、私を修正してください。
Core Text を使用して、キャラクターの境界矩形を正確に計算しようとしました。しかし、私が受け取った高さは常に、画面に描かれたキャラクターの実際の高さよりも大きかった. この場合、実際の高さは約 20 ですが、関数は何があっても 46 を返します。
誰かがこれに光を当てることができますか?
ありがとう。
ここにコードがあります
ios7 - uitextview のレイアウト マネージャーを置き換える
Mac OS X の NSTextContainer にはメソッド replaceLayoutManager: があり、NSTextView の NSLayoutManager を NSLayoutManager のサブクラスに置き換えます。
残念ながらiOSにはそのような機能はありません。これらのコード行を組み合わせてみましたが、クラッシュし続けます。
UITextview の NSLayoutManager を置き換える正しい手順は何ですか?
macros - NSLayoutManager drawGlyphsForGlyphRange:atPoint:
関数 drawGlyphsForGlyphRange:atPoint: はクラス NSLayoutManager でどのように実装されていますか? 私はそれが NSTextView によって呼び出され、次に fillBackgroundRectArray:count:forCharacterRange:color: を呼び出すことを知っています:
しかし、指定されたグリフレンジの背景色があれば、どのように決定するのでしょうか?