UIScrollView contentOffset在另一个视图推送后更改

我在Interface Builder中有一个UIViewController ,我在UIView添加了一个UIScrollView 。 它的contentOffset属性等于0.0,但是当我将UIScrollView滚动到最底层并推送另一个视图时, contentOffset发生变化。

NSLog给了我以下值:

 //View just loaded 2013-09-09 16:19:27.455 my_app[24588:907] Scroll View content offset is 0.000000 //We came back from another view 2013-09-09 16:19:30.957 my_app[24588:907] Scroll View content offset is 108.000000 

这种行为的原因是什么? 我刚刚在IB中添加了一个UIScrollView ,并且根本没有在代码中做任何事情。

scrollView的contentHeight大于self.view.height。 scrollView的frame保持不变。

看到我对类似问题的回答。

您需要在viewWillAppear:viewWillDisappear:适当地设置scrollview的contentOffset viewWillDisappear: .

另外,看到这个:

  • 回弹到UIViewController之后 ,对UIScrollView的原点问题的 回答会有所改变 。
  • 这个相关问题, UIScrollview Autolayout Issue 。

对于iOS 7/8 self.automaticallyAdjustsScrollViewInsets = NO; 解决了这个问题。

我有一个类似的问题,在解除一个viewController后,我的tableView中的contentOffset被更改为(0,-64)。

我的解决方案有点奇怪,我尝试了所有其他答案,但没有成功,唯一解决我的问题的是切换.xib控件树中的tableView位置

它是父视图中的第一个控件,如下所示:

之前

我在ImageView之后移动了tableView并且它工作正常:

后

似乎将表视图放在第一个位置导致了麻烦,并将表视图移动到另一个位置解决了问题。

PD我没有使用autoLayout和故事板

希望这可以帮助别人!

当您离开屏幕所在的滚动视图并返回时,它将在顶部或左侧或两者上添加屏幕大小的一半。 一个空白区域,你不想要的东西。 在我的情况下,分页变得一团糟,并且无法正常工作,直到我以编程方式或通过触摸将滚动放在CGPointZero中作为用户。 如果你调用NSLog( @"%f", scrollview.contentSize.height );viewDidLayoutSubviews您将看到大小已更改。

它发生在偏移值不为​​零的轴上。 因此,要解决它,您应该在它出现之前将其设置为零CGPointZero

@Steph Sharp答案解决了我的问题,除非我打开一个presentViewController作为弹出窗口( presentViewController )。 我试图通过在viewDidLayoutSubviews上添加bug量来补偿该值,但它会破坏分页。

简短的回答,我最终得到:

 - (void) viewDidLayoutSubviews { [super viewDidLayoutSubviews]; scrollView.contentOffset = previousPoint; } - (void) viewWillAppear:(BOOL)animated { scrollView.contentOffset = CGPointZero; } - (void) viewWillDisappear:(BOOL)animated { previousPoint = scrollView.contentOffset; scrollView.contentOffset = CGPointZero; } 

现在它在我离开该部分时工作或者如果我打开上面的弹出窗口。

我在UITableView上使用https://github.com/michaeltyson/TPKeyboardAvoiding 。

我的解决方案是从UITableView中删除类TPKeyboardAvoidingTableView 。 它导致TableViewController上的滚动问题与静态和动态单元格。

检查滚动CGSizeZerocontentSize属性是否为CGSizeZero 。 我遇到了类似的问题,因为没有设置contentSize