UIScrollView在向下滚动并推出新的视图控制器后,将内容向上移动

5
我有困难在我的uiscrollview中解决问题。在点击按钮将新视图控制器推到屏幕上后,再返回原始视图控制器时,uiscrollview内的内容会向上移动。请注意滚动视图顶部的变化。
以下是scrollView的代码:

enter image description here enter image description here

- (void)viewDidLoad{
    [super viewDidLoad];

    [scroll setScrollEnabled:YES];
    [scroll setContentSize:CGSizeMake(923, 934)];
    [self.view addSubview:scroll];
}

在-(void)viewDidAppear:(BOOL)animated方法中写入以下代码:[scrollView setContentOffset:CGPointMake(0,0) animated:YES]; - CRDave
当我这样做时,UIScrollView会回到顶部,但所有内容仍然向上移动(内容的顶部部分仍然超出视图)。 - Alexyuiop
刚刚注意到这可能会让其他人感到困惑,所以我添加了移位的新图片。 - Alexyuiop
请确认一下:iOS 6?如果您在viewDidAppear:中记录表视图的contentInsetcontentOffset,那么是否会提供任何线索?滚动条似乎证实视图的框架没有发生任何异常。 - Tommy
3个回答

4

我解决了这个问题

-(void)viewWillAppear:(BOOL)animated{

     [scroll setContentOffset:CGPointMake(0,0)];

}

3
我认为这是由于创建视图时自动布局的方式。由于某种原因,当您首次将视图添加到屏幕(即滚动视图)时,该视图的坐标不包括在导航栏下方,但是在添加另一个视图之后,它们会包括在内。我解决这个问题的方法之一是先创建一个空白视图并将其添加为子视图,然后再添加滚动视图。
代码如下:
UIView *vi = [[UIView alloc] initWithFrame:CGRectMake(-10, -10, 1, 1)]
[vi setBackgroundColor:[UIColor clearColor]];
[self.view addSubview:vi];
//Then add scrollView

这只是创建了一个离屏的1x1清除视图,并将其添加到主视图中,这使得主视图在添加scrollView之前能够正确定位自己。

您可能还想更改scrollView的y坐标,因为使用当前代码进行此操作将始终使其行为像第二种情况。

我通常会这样做:

frame.y+=self.navigationController.navigationBar.frame.size.height + 20;

此代码将导航栏高度和状态栏高度(20)相加。


你不一定需要这样做,但是当你创建scrollView时,将该数字添加到y值即可。 - Jsdodgers
但是加载时整个东西不会向下移动20吗?我只有在滚动并推送新的视图控制器后才会出现这个移动问题。最初,滚动视图总是正常加载的,但只有在滚动到底部、推送视图,然后返回后,整个东西才会移动。 - Alexyuiop
这就是为什么你首先添加空白视图的原因。它使得它的行为更类似于从另一个视图返回时的情况。 - Jsdodgers
做那个似乎无法解决问题。 - Alexyuiop
在Storyboard中通过在滚动视图后面添加一个空视图来修复。太疯狂了。 - Tom Kincaid
显示剩余7条评论

1

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