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


