UIScrollView内容偏移问题

3
我正在开发一个iPad应用程序,其中包含一个滚动视图,其大小取决于我在其中显示的对象数量。现在,虽然我没有设置任何content offset,但我发现每当视图加载时,滚动视图都会被偏移一定量。当我检查offset的值时,它显示为0。我不明白为什么在没有contentOffset值的情况下,滚动视图会表现出这种方式。有什么原因吗?
我怀疑这与iOS 4.2有关,因为我记得在测试iOS 3.2上的应用程序时没有出现这个问题。
更新:它被偏移的量似乎根据scrollView的contentSize而变化。如果scrollView的contentSize与其frame高度匹配(它是一个垂直滚动视图),则没有偏移。随着contentSize增加超过scrollView框架高度的值,偏移也成比例增加。然而,scrollView.contentOffset.y仍然等于0.0。

我有一个非常类似的问题。在3.2上运行正常,在4.2.1上出现故障。 - Guillaume
6个回答

1
如果您使用界面生成器-
  • 将滚动视图添加到视图中
  • 创建另一个视图并添加要添加到滚动视图中的元素
然后将此第二个视图添加到滚动视图中
在Viewdidload中编写以下代码:
scrollview.contentsize.y = lastelement.frame.origin.y + lastelement.frame.size.height + 10
这将调整滚动视图的内容大小。它显示第一个元素,可以从顶部向下滚动。

虽然它会调整到contentSize,但是同样的问题仍然存在。 - Nathan
我有不同的按钮,它们在滚动视图中显示不同的对象。当我单击每个按钮时,我发现contentOffset不断增加,从0到74到244等等。但这些值没有固定的模式。这使我想到是否存在某种内存问题,并且某些对象没有被释放。 - Nathan

1
UIScrollView在iPad上的iOS 4.2.1和iOS 3的行为不同。 我还不知道这是一个bug还是我错过了文档中的某个演进。
我的scrollview是在xib中创建的,我重用它来显示相同类的不同对象。在我的代码中,我只修改了这个scrollview的contentSize。
当使用NSLog查看时,偏移量仍为0,但在屏幕上却变化了。
为了解决我的问题,最终我创建了一个新的scrollview来显示每个新对象。这在你的情况下可能不可能,但对我来说,问题得到了解决。

0

同样适用于Swift

override func viewDidLayoutSubviews() {
    super.viewDidLayoutSubviews()
    scrollView.contentOffset = CGPointZero
}

0

我遇到了同样的问题。通过在viewWillAppear:animated中保留设置滚动视图的代码来解决。

-(void) viewWillAppear:(BOOL)animated
{
    scrollView.frame = self.view.frame;
    scrollView.contentSize = self.view.frame.size;
} 

0

将最后一个元素的frame.origin值和frame.height值相加,赋值给scrollView.contentOffset.y


这将滚动到滚动视图的最后一个元素。这是发生的事情。我希望滚动视图被调整以显示视图的第一个元素。但这并没有发生。 - Nathan

0
如果您使用自动布局并希望为滚动视图内容设置偏移量,这是对我有效的方法:
- (void)viewDidLayoutSubviews {
     [super viewDidLayoutSubviews];
     self.myScrollView.contentOffset = CGPointMake(500, 0);
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接