iOS - 检查键盘是否阻止查看

时间:2014-12-09 19:32:24

标签: ios uikeyboard

如何检查键盘是否阻挡了我的视线?

我有UIButton位于屏幕中央。我还有UITextfield使键盘出现。当我在iPhone 4上运行应用程序时,键盘会阻止按钮,但在其他型号上,它并没有。我有一个方法,当键盘出现时向上滚动视图。但我只想向上滚动以防视图被阻止。我可以检查iPhone的型号,然后决定是否滚动,但我想检查Button是否被阻止会更好。我该怎么办?

4 个答案:

答案 0 :(得分:1)

使用UIKeyboardWillShowNotification,您可以像这样获得键盘的高度:

NSValue *keyboardRect = [notification.userInfo objectForKey:UIKeyboardFrameBeginUserInfoKey];
CGFloat keyboardHeight = MIN(keyboardRect.CGRectValue.size.width, keyboardRect.CGRectValue.size.height);

得到相关的"最低"按钮的点。 (如buttonMaxY = CGRectGetMaxY(yourButton.frame))。 使用您已实现的滚动方法,但仅在必要时滚动:keyboardHeight + buttonMaxY>屏幕的高度。

答案 1 :(得分:0)

当键盘即将出现时,会发布带有键盘框架的UIKeyboardWillShowNotification通知。您可以计算并查看文本字段框架是否与键盘框架相交,然后滚动。

请参阅有关键盘通知的文档here

答案 2 :(得分:0)

我在类似的应用中解决了这个问题:

UIScrollView中嵌入该屏幕的用户界面,但配置它以便不启用滚动(代码为scrollEnabled属性,如果您正在使用故事板,则选中复选框。)

收到键盘通知后,从按钮获取帧,然后在滚动视图上调用scrollRectToVisible:animated:。它会将内容移动到使按钮可见所需的最小量,如果屏幕足够大,则根本不会。

答案 3 :(得分:0)

按照Leo Natan的解释,您可以尝试以下方式:

func keyboardWillShow(notification: Notification) {


    guard let keyboardFrame = notification.userInfo?[UIKeyboardFrameEndUserInfoKey] as? CGRect,
          let viewFrame = myView.frame else {

        log.error("I cannot calculate keyboard & view frame")
        return
    }

    if keyboardFrame.intersects(viewFrame) {

        // view covered by Keyboard
    }

}

注意使用UIKeyboardFrameEndUserInfoKey,您可以查看this link了解更多详情。