UIScrollView:内容首先显得太低

时间:2014-10-03 16:06:13

标签: ios uiscrollview

在发布大量代码之前,我想确保它不是一个众所周知的问题(独立于特定代码),所以首先我将解释我的问题:

在故事板中我创建了一个UIViewController,添加了一个UIScrollView以及另一个UIView(分层子视图)。当键盘出现时我需要滚动视图来向上推动内容,以便文本字段保持可见。在运行应用程序时,除了事实之外,一切正常,内容看起来比我的故事板中定义的更接近屏幕底部。点击文本字段后,内容会向上滚动(通过将scrollView.contentInsetscrollView.scrollIndicatorInsets调整为(0.0, 0.0, keyboardSize!.height, 0.0)),其位置与预期相符。当按下返回键时,键盘消失,内容再次向下滚动(通过调整scrollView.contentInsetscrollView.scrollIndicatorInsets(0.0, 0.0, 0.0, 0.0)),但现在一切都像我想要的那样,就像是在故事板中定义。

试图了解发生了什么我还要在viewDidLoad()keyboardDidShowkeyBoardDidHide的某些y点打印到控制台,但在比较这些时,他们&# 39;一切都一样。我错过了什么?您是否需要查看我的代码的某些特定部分?

enter image description here

enter image description here

4 个答案:

答案 0 :(得分:3)

设置时可以正常工作

viewDidAppear(animated: Bool) {
    scrollView.contentInset = UIEdgeInsetsMake(0.0, 0.0, 0.0, 0.0)
    scrollView.scrollIndicatorInsets = UIEdgeInsetsMake(0.0, 0.0, 0.0, 0.0)
}

欢迎任何有关其他/更好解决方案的评论!

答案 1 :(得分:1)

我刚刚遇到了这个问题 - 我搞砸了上面的所有解决方案,终于找到了解决方案。

对我来说,我只需要在ViewController构造函数中翻转右侧开关:

public ViewController ()
{
    AutomaticallyAdjustsScrollViewInsets = false;
}

我怀疑LoadView(),ViewWillAppear()等的结果会类似......

答案 2 :(得分:0)

你能检查一下:

  • edgesForExtendedLayout包含上边缘
  • automaticallyAdjustsScrollViewInsets已设置在您的视图中 控制器?

答案 3 :(得分:0)

这个会更好,没有明显的"碰撞"视图中的第一个项目,但在向用户显示之前这样做:

-(void)viewDidLayoutSubviews{
    [super viewDidLayoutSubviews];
    scrollView.contentInset = UIEdgeInsetsMake(0.0, 0.0, 0.0, 0.0);
    scrollView.scrollIndicatorInsets = UIEdgeInsetsMake(0.0, 0.0, 0.0, 0.0);
}