如何检查键盘是否阻挡了我的视线?
我有UIButton
位于屏幕中央。我还有UITextfield
使键盘出现。当我在iPhone 4上运行应用程序时,键盘会阻止按钮,但在其他型号上,它并没有。我有一个方法,当键盘出现时向上滚动视图。但我只想向上滚动以防视图被阻止。我可以检查iPhone的型号,然后决定是否滚动,但我想检查Button是否被阻止会更好。我该怎么办?
答案 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了解更多详情。