我是Swift/iOS的新手,我正在制作一个简单的应用程序来跟踪我家里的药柜。我在管理屏幕上的文本输入键盘时遇到了问题。
这个应用程序基本上是一个包含数据条目的表视图,当按下其中一个条目时,您将进入包含一些详细信息的详细视图。
在这个细节视图中,我有一个UIScrollView,它被约束为等于安全区域,在它里面有一个名为“容器视图”的UIView,它与滚动视图的大小相同,在另一个视图中使用AutoLayout (没有警告)组成屏幕。
在其中一个子视图中,有一个UITextField,我用它来收集用户通过屏幕键盘输入的笔记。
我添加了一些代码来管理屏幕上的键盘,当它出现时调整视图底部插图,以防止键盘隐藏文本字段,并在键盘消失时删除该插图。
我最终得到了以下代码,这是我从hackingwithswift.com获得的(属性观察器设置为正确调用此函数,我已确认它是有效的):
func adjustInsetForKeyboardShowHide(notification: Notification) {
let userInfo = notification.userInfo!
let keyboardScreenEndFrame = (userInfo[UIResponder.keyboardFrameEndUserInfoKey] as! NSValue).cgRectValue
let keyboardViewEndFrame = view.convert(keyboardScreenEndFrame, from: view.window)
if notification.name == UIResponder.keyboardWillHideNotification {
scrollView.contentInset = UIEdgeInsets.zero
} else {
scrollView.contentInset = UIEdgeInsets(top: 0, left: 0, bottom: keyboardViewEndFrame.height, right: 0)
}
scrollView.scrollIndicatorInsets = scrollView.contentInset
}
然而,即使当键盘出现在屏幕上时,该函数被正确调用,视图也不会滚动。我不确定问题出在这里还是在IB的某个地方。
让我印象深刻的是,在键盘出现在屏幕上后,我可以手动向下滚动,滚动到合适的程度,只是它不会像我希望的那样自动滚动。正如预期的那样,当屏幕上的键盘没有显示时,视图不会滚动,所以显然调整功能工作得很好,它只是不会自己滚动。
当键盘消失时,视图重新调整到正常状态,因此该部件工作正常。
有什么想法吗?
非常感谢!
发布于 2019-01-24 00:52:05
在scrollView中,必须设置内容偏移量。因此,在您的情况下,您必须这样做:
if notification.name == UIResponder.keyboardWillHideNotification {
scrollView.setContentOffset(CGPoint(x: 0, y: 0), animated: true)
} else {
scrollView.setContentOffset(CGPoint(x: 0, y: keyboardViewEndFrame.size.height), animated: true)
}
https://stackoverflow.com/questions/54331667
复制相似问题