我遇到了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:我搜索过类似的问题,但是唯一可以提供帮助的问题,我无法理解,其他人有类似但不同的问题)。
由于
答案 0 :(得分:1)
我和UItableView有很相似的问题,它也是UIScrollView,但是垂直。 使用viewWillDisappear:不起作用,因为当用户启动推送另一个VC时,iOS会发出明显的滚动。
也无法解决此问题。
答案 1 :(得分:1)
我遇到了同样的问题。 这是解决方案: 1.我在viewWillDisappear中进行内容偏移备份 2.在viewWillAppear中恢复没有动画的偏移。
更新:请确保您没有在viewWillLayoutSubviews或上述方法中调整contentSize。
答案 2 :(得分:1)
在contentOffset
保存viewWillDisappear
备份不是正确的处理方式,如果您有一些需要在viewWillAppear
上显示/隐藏的视图,则处理起来会更糟。
最好的方法是将contentOffset
保存在scrollViewDidScroll
- 在变量中声明要保存偏移量的位置
var previousOffsetY: CGFloat = 0.0
var offsetLimitation: CGFloat = 50.0 // is the limit where I want to play show/hide
- 在
UIScrollViewDelegate
的{{1}}内,保存偏移量。
scrollViewDidScroll
- 在
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。
viewWillAppear