Ios UIScrollview在向下滚动并按下新的ViewController后向上移动内容

Ios UIScrollview在向下滚动并按下新的ViewController后向上移动内容,ios,objective-c,uiscrollview,Ios,Objective C,Uiscrollview,在我的uiscrollview中,我很难找出这个问题。单击按钮将新视图控制器推到屏幕上后,my uiscrollview中的内容会向上移动,然后返回到原始视图控制器。注意scrollview的顶部是如何变化的 下面是scrollView的代码 - (void)viewDidLoad{ [super viewDidLoad]; [scroll setScrollEnabled:YES]; [scroll setContentSize:CGSizeMake(923, 93

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

下面是scrollView的代码

- (void)viewDidLoad{
    [super viewDidLoad];

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

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

例如:

UIView *vi = [[UIView alloc] initWithFrame:CGRectMake(-10, -10, 1, 1)]
[vi setBackgroundColor:[UIColor clearColor]];
[self.view addSubview:vi];
//Then add scrollView
这只是创建了一个屏幕外1x1清晰视图,并将其添加到主视图中,使主视图在添加滚动视图之前正确定位自身

您可能还需要更改scrollView的y坐标,因为使用当前代码执行此操作将使其始终与第二种情况相同

我通常会:

frame.y+=self.navigationController.navigationBar.frame.size.height + 20;
它添加了导航栏高度和状态栏高度(20)。

我解决了这个问题

-(void)viewWillAppear:(BOOL)animated{

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

}

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


在-(void)viewdide:(BOOL)动画方法[scrollView setContentOffset:CGPointMake(0,0)animated:YES]中写入此内容;当我这样做时,uiscrollview会移到顶部,但所有内容都会向上移动(内容的顶部部分仍然在视图之外)。我注意到这会让其他人感到困惑,所以我添加了新的移动图片以确认:iOS 6?如果将表视图的
contentInset
contentOffset
记录在
viewdide:
中,那么这是否提供了任何线索?滚动条显示为确认视图的框架没有发生任何异常情况。当我滚动.frame.origin.y+=self.navigationController.navigationBar.frame.size.height+20时;它给了我一个“表达式不可赋值”的错误,你不必这样做,但是当你创建scrollView时,把这个数字加在y上。但是当它加载时,这不是把整个东西向下移动了20吗?我只有在向下滚动并按下一个新的视图控制器后才会出现这种移位问题。最初,ScReVIEW总是加载很好,但是只有在向下滚动之后,推视图,然后返回,整个事情才会发生变化,这就是为什么首先添加空白视图。它使它的行为更类似于你从另一个角度返回时的行为。这样做似乎并不能解决问题