在发布大量代码之前,我想确保它不是一个众所周知的问题(独立于特定代码),所以首先我将解释我的问题:
在故事板中我创建了一个UIViewController,添加了一个UIScrollView以及另一个UIView(分层子视图)。当键盘出现时我需要滚动视图来向上推动内容,以便文本字段保持可见。在运行应用程序时,除了事实之外,一切正常,内容看起来比我的故事板中定义的更接近屏幕底部。点击文本字段后,内容会向上滚动(通过将scrollView.contentInset
和scrollView.scrollIndicatorInsets
调整为(0.0, 0.0, keyboardSize!.height, 0.0)
),其位置与预期相符。当按下返回键时,键盘消失,内容再次向下滚动(通过调整scrollView.contentInset
和scrollView.scrollIndicatorInsets
到(0.0, 0.0, 0.0, 0.0)
),但现在一切都像我想要的那样,就像是在故事板中定义。
试图了解发生了什么我还要在viewDidLoad()
,keyboardDidShow
和keyBoardDidHide
的某些y点打印到控制台,但在比较这些时,他们&# 39;一切都一样。我错过了什么?您是否需要查看我的代码的某些特定部分?
答案 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);
}