navigationController
:にプッシュされる直前に、詳細ビューコントローラの状態を調整しています。
[self.detailViewController detailsForObject:someObject];
[self.navigationController pushViewController:self.detailViewController
animated:YES];
DetailViewController
scrollViewにはがあります。渡されたオブジェクトに基づいてサイズを変更するコンテンツ:
- (void)detailsForObject:(id)someObject {
// set some textView's content here
self.contentView.frame = <rect with new calculated size>;
self.scrollView.contentSize = self.contentView.frame.size;
self.scrollView.contentOffset = CGPointZero;
}
これですべて機能しますが、scrollViewcontentOffset
はnavigationControllerのスライドインアニメーション中に調整します。最後のcontentOffset
contentSizeと新しく計算されたcontentSizeの差に設定されます。これは、detailsViewを2回目に開いたときに、詳細が不要な場所にスクロールすることを意味します。contentOffset
をCGPointZero
明示的に設定しているのに。
contentOffset
inをリセットし- viewWillAppear
ても効果がないことがわかりました。私が思いついた最善の方法は、contentOffsetをリセットしてviewDidAppear
、コンテンツの上下の動きを目立たせることです。
- (void)viewDidAppear:(BOOL)animated {
self.scrollView.contentOffset = CGPointZero;
}
変更時にUIScrollView
調整されないようにする方法はありますか?contentOffset
contentSize