たくさんのテキストを含む UITextView があります。スクロールは、iPhone 4、5、および 6 ではほぼスムーズですが、6 Plus では多くのカクつきがあります。(これは、押し出さなければならないピクセルの量に対して 6 Plus のパワーが不足しているためだと思います)。ある領域をスクロールすると、その領域をスクロールして戻ると、スクロールがスムーズに行われることに気付きました。領域のレイアウトは既に実行されており、プロセッサは多くのことを行う必要はありません。リージョンに到達する前にレイアウトを強制したい。これは私が試したものです:
textView.layoutManager.ensureLayoutForTextContainer(textView.textContainer)
これはまったく何もしていないようです。領域の最初のパスではまだスクロールがスムーズではなく、前後のログ ステートメントには 0.00014 秒の差があります。本当に正しいテキスト コンテナーを取得していることを確認するために、次のことも試しました。
textView.layoutManager.ensureLayoutForTextContainer(textView.layoutManager.textContainers[0] as NSTextContainer)
これも違いはありませんでした。
テキスト コンテナ内のすべてのテキストを強制的にレイアウトするにはどうすればよいですか?
どんな助けでも大歓迎です。
ありがとう。
追加するために編集: TheCodingArt の質問に答えるには: レイアウト マネージャーの点でエキゾチックなことは何もしていません。これは私のセットアップコードです:
var textStorage = NSTextStorage()
var layoutManager = NSLayoutManager()
textStorage.addLayoutManager(layoutManager)
var textContainer = NSTextContainer(size: textContainerSize)
layoutManager.addTextContainer(textContainer)
textView = UITextView(frame: CGRectMake(0, 0, textViewWidth, textViewHeight), textContainer: textContainer)
textView.showsHorizontalScrollIndicator = false
textView.showsVerticalScrollIndicator = false
textView.backgroundColor = UIColor.clearColor();
textView.editable = false;
textView.selectable = true;
textView.scrollsToTop = false
self.view.addSubview(textView)
テキストコンテナーとテキスト ストレージを明示的にインスタンス化して追加することは、この質問に対する最初の回答から学んだことです 。
後で、テキストを追加します。
textStorage.appendAttributedString(attribStr)