我知道我发布的问题已经被讨论了很多,但据我在 SO 中搜索,我找不到特定于我的问题的解决方案。我发布这个是为了获得一些意见。
问题:
View hierarchy: View -> ScrollView -> View -> Textfield
我已经实现了两个屏幕,其中多个文本字段位于 ScrollView 的顶部,以避免键盘在页面底部遮挡文本字段。我使用 Apple 提供的示例代码稍加修改就实现了这一点。
- 订阅
UIKeyboardWillShowNotification
和UIKeyboardWillHideNotification
- 显示键盘时,从
userInfo
字典中获取键盘的高度,并设置适当的内容插入以将文本字段移动到键盘上方 - 当键盘隐藏时,将内容插入设置为
UIEdgeInsetZero
以恢复正常大小
当有更多的文本字段可以占据整个屏幕时(假设有 10 个文本字段并且它们超出了 ScrollView 的框架),上面的实现工作得很好。每当我点击一个文本字段时,它都会按预期移动到键盘上方,我也可以滚动页面直到最底部的文本字段在键盘框架上方可见(当键盘仍然打开时)。
当我在 ScrollView 中只有两个在屏幕中垂直居中的文本字段时,我的问题就出现了。当我点击一个文本字段时, ScrollView 得到一个等于键盘高度的插图,它按预期移动到键盘上方,但是当我滚动屏幕时,我可以看到文本字段下方有一个巨大的空白区域(由于额外的插图)。
当页面中只有一个或两个文本字段时,如何避免出现空白?我是否必须编写不同的逻辑来处理这种情况?任何帮助,将不胜感激。
代码如下:
override func viewDidLoad() {
super.viewDidLoad()
NSNotificationCenter.defaultCenter().addObserver(self, selector: "keyboardWillShow:", name: UIKeyboardWillShowNotification, object: nil)
NSNotificationCenter.defaultCenter().addObserver(self, selector: "keyboardWillHide:", name: UIKeyboardWillHideNotification, object: nil)
}
func keyboardWillShow(notification: NSNotification) {
if let userInfo = notification.userInfo {
let keyboardFrame = (userInfo[UIKeyboardFrameEndUserInfoKey] as? NSValue)?.CGRectValue()
if let kbFrame = keyboardFrame {
let inset = CGRectGetHeight(kbFrame)
scrollView.contentInset = UIEdgeInsetsMake(0, 0, inset, 0)
scrollView.scrollIndicatorInsets = UIEdgeInsetsMake(0, 0, inset, 0)
}
}
}
func keyboardWillHide(notfication: NSNotification) {
scrollView.contentInset = UIEdgeInsetsZero
scrollView.scrollIndicatorInsets = UIEdgeInsetsZero
}
最佳答案
TPKeyboardAvoidingScrollView 很好,但我最近切换到 IQKeyboardManager -> https://github.com/hackiftekhar/IQKeyboardManager
由你来选择,但我更喜欢 IQKeyboardManager,因为它很简单
关于ios - 键盘启动时显示文本字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35680568/