【问题标题】:UIScrollView scrolls to (0, 0) automatically on pushViewControllerUIScrollView 在 pushViewController 上自动滚动到 (0, 0)
【发布时间】:2014-08-13 06:47:31
【问题描述】:

我有一个 UIScrollView 包含一个 UICollectionView 和一个 UITableView 并排使用 autolayout 禁用。 collectionView 的原点是 (0, 0),tableView 的原点是 (320, 0)。现在当在 tableView 中选择一行时,另一个视图控制器被推送到 scrollView 上自动滚动到 (0, 0) 而没有动画。

日志

2014-08-13 12:08:05.466 Flat.to[23057:613] ScrollView.contentOffset: {320, 0} 2014-08-13 12:08:05.466 Flat.to[23057:613] ScrollView.contentSize: {640, 500} 2014-08-13 12:08:06.690 Flat.to[23057:613] Did select row 2014-08-13 12:08:06.695 Flat.to[23057:613] View will disappear called 2014-08-13 12:08:06.698 Flat.to[23057:613] ScrollView.contentOffset: {0, 0} 2014-08-13 12:08:06.699 Flat.to[23057:613] ScrollView.contentSize: {640, 500} 2014-08-13 12:08:07.235 Flat.to[23057:613] View did disappear called

正因为如此,pushViewController 动画看起来有点小故障。

虽然我可以将 contentOffset 保存在 viewWillDisappear 中,但是有没有办法完全防止这种情况发生?

viewWillDisappearviewDidDisappear 之间是否有我可以覆盖的函数调用?

【问题讨论】:

  • 你好 Hernesh,你有没有找到任何解决方案?我在这里有完全相同的问题。谢谢!

标签: ios objective-c uiscrollview


【解决方案1】:

是的,包含滚动视图的视图控制器的 viewWillAppear 方法将在即将弹出的视图控制器的 viewDidDisapear 之后调用。在那里你可以设置scrollVIew的内容偏移量。

【讨论】:

  • 这不是我想要的。我希望它不会首先自动滚动,而不是每次都设置 contentOffset。
  • 你能说清楚一点吗?你现在在哪里设置你的 scrollView 的 contentOffset ?
  • 问题是当我在 tableView 中选择一行时,scrollView 会自动滚动到 (0, 0),因此在 pushViewController 动画期间会显示 collectionView 而不是 tableView。
  • 您似乎将 contentOffset 设置在错误的位置。请用代码更新您的问题!
  • 从您的日志语句中,我认为您已经在 ViewWillDissapear 中设置了 scrollView 的 contentOffset,而不是尝试在该方法中保存状态,而是尝试保存在 ViewDidDissapear 中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-01-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多