私はPage View
のモーダル画面を持っています。 Page View
は、ストーリーボードIDを使用してページを読み込みます。すべてのページが同じです。各ページには、テキストとスクロール可能なUITextView
があります。 viewDidLoad
にテキストが設定されます。テキストが設定されると自動的に下にスクロールしますのでviewDidAppear
に[self.textField setContentOffset:CGPointZero animated:animated];
を呼び出します。UITextViewが先頭から始まらない
これは最初のページを除いて問題なく動作します。 bugのため、viewDidLayoutSubviews
にUITextView
の場合はscrollEnabled
をトグルする必要があります。しかし、最初のページがロードされるときには、の前に何らかの理由でviewDidAppear
が呼び出されます。これはおそらく、トグルのためにUITextView
をスクロールするという副作用があります。最初のページをスクロールして最初のページに戻ると、期待通りに機能します(呼び出し元の順序は他のページと同じです)。 viewDidLoad
でメインキューにasync_dispatch
内のテキストを設定する
- :
私が試したいくつかの他の事。
scrollRangeToVisible
とsetContentOffset
のviewDidLayoutSubviews
- 種々の組合せで
[self.textField scrollRangeToVisible:NSMakeRange(0, 0)];
を呼び出します。 self.automaticallyAdjustsScrollViewInsets = NO;
をviewDidLoad
に設定します。- 誰もがこの問題を解決する方法についてのアイデアを持って
は、ビューコントローラのためのコードです:
- (void)viewDidLoad {
[super viewDidLoad];
// Get help string
NSMutableAttributedString *attributedString = <fetch text from external source>
// Set text
self.textField.attributedText = attributedString;
}
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
[self.textField setContentOffset:CGPointZero animated:animated];
}
- (void)viewDidLayoutSubviews {
[super viewDidLayoutSubviews];
self.textField.scrollEnabled = NO;
self.textField.scrollEnabled = YES;
}
'viewWillAppear:'何かが画面上に現れる前の最後の分の調整を行うのに適した場所は通常、私は、これはあなたが – Alex
その良い推測で探しているものだと思いますが、この場合 'viewDidLayoutSubviews' 'viewWillAppear'の後に呼び出され、強制スクロールはレイアウトの後に行わなければなりません(何らかの理由でレイアウトコールバックにはありません)。 'viewDidLayoutSubviews'の後に' viewDidAppear'が呼び出されます。 –
あなたの質問のタイトルは 'UITextView'と言っていますが、あなたはあなたの質問で' UITextField'を繰り返し参照しています:それは? – Alex