我正在制作一个需要创建注册表单以接受用户输入的应用。对于输入,我有4个字段。我调整了UIStackView
中的4个字段,并使之成为应用程序设计的垂直居中视图。一切都很好。但是在小型设备中,键盘覆盖了某些字段。
为解决我的问题,我进行了研发并使用了IQKeyboardManager
。这对我帮助很大。但是我已经看到,在所有字段中,您都可以使用IQKeyboardManager
提供的工具栏来访问其他字段。但是现在提前几天使用应用程序,您可以看到可以上下滚动视图。
我所做的事情:
因此,为了解决我的问题,我在堆栈视图周围创建了一个UIScrollView
,其中包含我的字段,但是它从没有帮助我。因为它也在制造设计问题。 Stackview永远不会位于ScrollView的垂直居中位置。此外,无论是否出现键盘,始终都启用滚动视图。看看下面的图片,这些图片让我感到迷惑
我想要的东西:
我所要的就是直到滚动,除非出现键盘,否则scrollview不能滚动。出现键盘后,滚动视图必须是可滚动的。我也想检查是否需要使scrollview可滚动。因为在较大的设备(如iPhone 8plus)中,我认为无需显示滚动视图,因为键盘始终位于最后一个UITextfield
以下。它只是与iPhone 5等较小的手机重叠。
请帮助我。我的想法是应用程序正在使用scrollview。他们可能正在使用其他功能,这些功能可在打开键盘时在视图中起作用,而在未打开键盘时不显示任何滚动视图。
答案 0 :(得分:0)
使用keyboardWillShowNotification
和keyboardWillHideNotification
通知来更改scrollView
的高度。在keyboardWillShowNotification
上,您将scrollView
的高度减小键盘的高度。在keyboardWillHideNotification
中,您只需重置高度即可。如有疑问,请发表评论。
答案 1 :(得分:0)
要在滚动视图上设置约束,可以参考
然后,在视图控制器中实现键盘观察器。
override func viewDidLoad()
{
super.viewDidLoad()
NotificationCenter.default.addObserver(self, selector: #selector(self.keyboardWillShow(notification:)), name: NSNotification.Name.UIKeyboardDidShow, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(self.keyboardWillHide(notification:)), name: NSNotification.Name.UIKeyboardDidHide, object: nil)
}
func keyboardWillShow(notification: NSNotification) {
// set scroll view content size height as per your need (subtract keyboard height from original)
}
func keyboardWillHide(notification: NSNotification) {
// reset scroll view content size height to original
}