在pushViewController之后重置ScrollView contentOffset

时间:2014-03-20 02:09:58

标签: ios objective-c scrollview tableview push

我遇到了ScrollView的问题,我的scrollView有640个宽度,从0到320它是一个mapView,从320到640它是一个tableView。 我有一个segmentedButton有2个选项,可以将我的视图从contentOffset从0切换到320。 问题是,如果我在x中切换到320的contentOffset并按下tableView的单元格,在释放按钮以推送其他viewController后,我的scrollView的contentOffset在x中重置为0。我需要在tableView上保持contentOffset,在320 x。 我尝试了很多东西,比如使用viewWillDisappear和生命周期方法。 我能够达到的最接近的是在按下后再回到tableView。虽然,我无法让它停留在tableView上以推送下一个viewController。

感谢任何帮助!

(Ps:我搜索过类似的问题,但是唯一可以提供帮助的问题,我无法理解,其他人有类似但不同的问题)。

由于

3 个答案:

答案 0 :(得分:1)

我和UItableView有很相似的问题,它也是UIScrollView,但是垂直。 使用viewWillDisappear:不起作用,因为当用户启动推送另一个VC时,iOS会发出明显的滚动。

也无法解决此问题。

答案 1 :(得分:1)

我遇到了同样的问题。 这是解决方案: 1.我在viewWillDisappear中进行内容偏移备份 2.在viewWillAppear中恢复没有动画的偏移。

更新:请确保您没有在viewWillLayoutSubviews或上述方法中调整contentSize。

答案 2 :(得分:1)

contentOffset保存viewWillDisappear备份不是正确的处理方式,如果您有一些需要在viewWillAppear上显示/隐藏的视图,则处理起来会更糟。

最好的方法是将contentOffset保存在scrollViewDidScroll

  
      
  1. 在变量中声明要保存偏移量的位置
  2.   
var previousOffsetY: CGFloat = 0.0
var offsetLimitation: CGFloat = 50.0 // is the limit where I want to play show/hide
  
      
  1. UIScrollViewDelegate的{​​{1}}内,保存偏移量。
  2.   
scrollViewDidScroll
  
      
  1. extension ViewController: UIScrollViewDelegate { func scrollViewDidScroll(_ scrollView: UIScrollView) { previousOffsetY = scrollView.contentOffset.y UIView.animate(withDuration: 0.5, animations: { if offset <= self.offsetLimitation { // show } else { // hide } }) } } ,控制重置偏移量后所需的UI。
  2.   
viewWillAppear