在/ other / orientation中获取当前iOS设备的键盘高度,同时隐藏键盘

时间:2015-09-22 11:13:59

标签: ios objective-c uitextview uikeyboard

目前,我知道如何通过通知获取当前键盘高度,并且我使用它来设置各种自动布局约束。当键盘隐藏时,某些界面元素也向下移动,同时保持相同的大小。它的大小由UITextView(以及在其中输入的文本)决定,除非它太大,滚动启用并且它的高度被约束到当前高度(因此它不会#39;启用滚动时立即崩溃)。当键盘消失时,这很有效。问题是屏幕旋转时。目前的固定高度不再具有空间,因此约束变得不可满足。要正确更新它们并知道文本视图的高度应该是什么,我需要知道键盘在其旋转方向上的高度(因为它上面的空间应该等于此),是否存在无论如何要做到这一点,而不依赖于硬编码值? (即使这样,在定制键盘上也可能无法工作)

我已经考虑过以这种方式设置高度的替代方案,但我能想到的每个解决方案最终都需要相同的键盘信息。

1 个答案:

答案 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)
}