UIScrollview 在向下滚动并推送新的视图控制器后向上移动内容

Posted

技术标签:

【中文标题】UIScrollview 在向下滚动并推送新的视图控制器后向上移动内容【英文标题】:UIScrollview shifting contents up after scrolling down and pushing new viewcontroler 【发布时间】:2013-08-08 09:41:16 【问题描述】:

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

这是滚动视图的代码

- (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]; 当我这样做时,uiscrollview 会移到顶部,但一切仍然向上移动(内容的顶部仍然不在视图中)。 刚注意到这会让其他人感到困惑,所以我添加了新的班次图片 只是为了确认:ios 6?如果您在viewDidAppear: 中记录表视图的contentInsetcontentOffset,那么这是否提供了任何线索?滚动条似乎确认视图的框架没有发生任何奇怪的事情。 【参考方案1】:

我解决了问题

-(void)viewWillAppear:(BOOL)animated

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


【讨论】:

【参考方案2】:

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

如:

UIView *vi = [[UIView alloc] initWithFrame:CGRectMake(-10, -10, 1, 1)]
[vi setBackgroundColor:[UIColor clearColor]];
[self.view addSubview:vi];
//Then add scrollView

这只是创建了一个屏幕外的 1x1 清晰视图并将其添加到主视图中,这使得主视图在添加滚动视图之前正确定位自身。

您可能还想更改滚动视图的 y 坐标,因为使用当前代码执行此操作将使其始终像第二种情况一样。

我通常这样做:

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

添加导航栏高度和状态栏高度(20)。

【讨论】:

当我做 scroll.frame.origin.y +=self.navigationController.navigationBar.frame.size.height + 20;它给了我一个“表达式不可分配”的错误 您不必这样做,但是当您创建滚动视图时,将该数字添加到 y 本来的值中。 但是当它加载时,这不是将整个东西向下移动 20 吗?在我向下滚动然后推送一个新的视图控制器后,我只有这个移动问题。最初,滚动视图总是加载正常,但只有在向下滚动、推送视图然后返回之后,整个事情才会发生变化 这就是您首先添加空白视图的原因。它使它的行为与您从另一个视图返回时的行为更加相似。 这样做似乎无法解决问题【参考方案3】:

起初我使用了您的答案)但一段时间后我找到了解决此问题的解决方案,而无需每次将内容滚动到顶部。希望它对你有用)

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

【讨论】:

以上是关于UIScrollview 在向下滚动并推送新的视图控制器后向上移动内容的主要内容,如果未能解决你的问题,请参考以下文章

UIScrollView 不会一直向上/向下滚动

_adjustContentOffsetIfNecessary - UIScrollView 自动滚动到顶部

UIScrollView 应该只向下滚动

UIScrollView 在捏合时自动向下滚动?

UIScrollView 表示滚动但不在视图中滚动

UIScrollView 在第一次触摸时会向下跳