向下滚动并推送新的viewcontroler后,UIScrollview将内容向上移动

时间:2013-08-08 09:41:16

标签: ios objective-c uiscrollview

我在uiscrollview上找出这个问题很困难。单击按钮将新视图控制器推入屏幕后,我的uiscrollview中的内容会向上移动,然后返回到原始视图控制器。注意滚动视图的顶部是如何变化的。

enter image description here enter image description here

以下是scrollView的代码

- (void)viewDidLoad{
    [super viewDidLoad];

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

3 个答案:

答案 0 :(得分:4)

我解决了问题

-(void)viewWillAppear:(BOOL)animated{

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

}

答案 1 :(得分:3)

我认为这是因为创建视图时autoLayout的完成方式。出于某种原因,当您首次向屏幕添加视图(滚动视图)时,视图的坐标不包括在导航栏下,但在添加另一个视图后,它们会执行。我解决这个问题的一种方法是在添加scrollView之前创建一个空白视图并将其添加为子视图。

如:

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)。

答案 2 :(得分:1)

起初我使用了你的答案)但是过了一段时间我找到了解决方案如何解决这个问题,而不是每次都将内容滚动到顶部。希望它对你有用)

https://stackoverflow.com/a/22699785/246598