目前,我知道如何通过通知获取当前键盘高度,并且我使用它来设置各种自动布局约束。当键盘隐藏时,某些界面元素也向下移动,同时保持相同的大小。它的大小由UITextView(以及在其中输入的文本)决定,除非它太大,滚动启用并且它的高度被约束到当前高度(因此它不会#39;启用滚动时立即崩溃)。当键盘消失时,这很有效。问题是屏幕旋转时。目前的固定高度不再具有空间,因此约束变得不可满足。要正确更新它们并知道文本视图的高度应该是什么,我需要知道键盘在其旋转方向上的高度(因为它上面的空间应该等于此),是否存在无论如何要做到这一点,而不依赖于硬编码值? (即使这样,在定制键盘上也可能无法工作)
我已经考虑过以这种方式设置高度的替代方案,但我能想到的每个解决方案最终都需要相同的键盘信息。
答案 0 :(得分:1)
您是否考虑过使用内容插件?我通常使用这个,你不必担心所有这些限制,适用于UIScrollView
的任何后代
// Register for keyboard notifications
NSNotificationCenter.defaultCenter().addObserver(self, selector: "keyboardWillChangeFrame:", name: UIKeyboardWillChangeFrameNotification, object: nil)
NSNotificationCenter.defaultCenter().addObserver(self, selector: "keyboardWillHide:", name: UIKeyboardWillHideNotification, object: nil)
// Process notifications
func setScrollViewInsets(insets: UIEdgeInsets) {
self.textView.contentInset = insets
self.textView.scrollIndicatorInsets = insets
}
func keyboardWillChangeFrame(note: NSNotification) {
if var kbRect = note.userInfo![UIKeyboardFrameEndUserInfoKey]?.CGRectValue() {
let insets = UIEdgeInsets(top: 0, left: 0, bottom: kbRect.size.height, right: 0)
self.setScrollViewInsets(insets)
}
}
func keyboardWillHide(note: NSNotification) {
let insets = UIEdgeInsetsZero
self.setScrollViewInsets(insets)
}