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

时间:2013-09-09 12:24:20

标签: ios cocoa-touch uiview uiscrollview interface-builder

我在Interface Builder中有一个UIViewController,我向UIScrollView添加了UIView。它的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。滚动视图的frame保持不变。

6 个答案:

答案 0 :(得分:12)

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

答案 1 :(得分:9)

请参阅my answer类似的问题。

您需要在contentOffsetviewWillAppear:中正确设置滚动视图的viewWillDisappear:

另外,请看:

答案 2 :(得分:3)

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

我的解决方案有点奇怪,我尝试了所有其他答案,但没有成功, 解决我的问题的唯一方法是切换.xib

的控件树中的tableView位置

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

before

我在ImageView之后移动了tableView,它运行起来了:

after

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

Pd积。我没有使用autoLayout和故事板

希望这可以帮助别人!

答案 3 :(得分:3)

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

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

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

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

viewDidLayoutSubviews

现在,当我离开该部分或打开上面的弹出窗口时它会起作用。

答案 4 :(得分:0)

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

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

答案 5 :(得分:0)

检查您的滚动视图的contentSize属性是否为CGSizeZero。我有一个类似的问题,因为contentSize没有设置。