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:
中记录表视图的contentInset
和contentOffset
,那么这是否提供了任何线索?滚动条似乎确认视图的框架没有发生任何奇怪的事情。
【参考方案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 在向下滚动并推送新的视图控制器后向上移动内容的主要内容,如果未能解决你的问题,请参考以下文章