【发布时间】:2011-09-25 06:39:13
【问题描述】:
我正在调整细节视图控制器的状态,就在它被推送到navigationController 之前:
[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;
}
现在,这一切正常,但在 navigationController 的滑入动画期间,scrollView 将其调整为 contentOffset。 contentOffset 将设置为最后一个 contentSize 和新计算的值之间的差异。这意味着第二次打开 detailsView 时,详细信息将滚动到某个不需要的位置。即使我将contentOffset 明确设置为CGPointZero。
我发现重置- viewWillAppear中的contentOffset没有效果。我能想到的最好办法是重置 viewDidAppear 中的 contentOffset,导致内容明显上下移动:
- (void)viewDidAppear:(BOOL)animated {
self.scrollView.contentOffset = CGPointZero;
}
有没有办法防止UIScrollView 在其contentSize 更改时调整其contentOffset?
【问题讨论】:
-
为什么要调整动画块内的内容偏移量?跳过 CATransaction 的东西,所以它不会动画。这样它看起来就不会波涛汹涌。
-
删除 CATransaction 的东西确实不会改变任何事情,所以它被删除了。
-
你确定 viewDidAppear 被调用了吗?我会在其中设置断点或 NSLog 语句。另外,您是否尝试过切换调用顺序,即在推送后设置 detailsForObject?
-
是的,它被调用了,它为滚动视图设置了正确的 contentOffset。但是 contentOffset 动画发生在 viewDidAppear 被调用之前。
标签: ios iphone uiscrollview contentsize