我在将一个细节视图控制器推入导航控制器之前,调整它的状态:
[self.detailViewController detailsForObject:someObject];
[self.navigationController pushViewController:self.detailViewController
animated:YES];
在 DetailViewController
中有一个滚动视图,我根据传递的对象调整内容的大小:
- (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;
}
现在,所有这些都可以正常工作,但是 scrollView 在 navigationController 的滑入动画期间会调整其 contentOffset
。这意味着,contentOffset
将被设置为上一次 contentSize 与新计算 contentSize 之间的差异。这意味着第二次打开 detailsView 时,详细信息将滚动到某个不希望的位置。尽管我明确地将 contentOffset
设置为 CGPointZero
。
我发现在 - viewWillAppear
中重置 contentOffset
没有效果。我能想到最好的方法是在 viewDidAppear
中重置 contentOffset,在内容上下移动时会出现明显的上下移动:
- (void)viewDidAppear:(BOOL)animated {
self.scrollView.contentOffset = CGPointZero;
}
当 UIScrollView
的 contentSize
被更改时,是否有一种方法可以防止它调整其 contentOffset
?