键盘在出现时的高度会有所变化。

13 浏览
0 Comments

键盘在出现时的高度会有所变化。

我试图通过修改底部约束来在键盘出现时提高我的观点,但是返回给我的键盘高度是不固定的。

当我在模拟器中点击一个文本框时,键盘高度是302。当我尝试打开和关闭软键盘时,键盘出现时显示为260。为什么会这样呢?

NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(FriendsViewController.keyboardWillShow(_:)), name: UIKeyboardWillShowNotification, object: nil)

func keyboardWillShow(notification: NSNotification) {

print("键盘出现")

guard let keyboardHeight = (notification.userInfo! as NSDictionary).objectForKey(UIKeyboardFrameBeginUserInfoKey)?.CGRectValue.size.height else {

return

}

bottomConstraint.constant = keyboardHeight

print("键盘高度: \(keyboardHeight)")

self.view.layoutIfNeeded()

}

260的高度实际上是正确的高度,因为它能完美调整我的观点。用302的高度,我的观点会偏移得太高。

我的视图布局是:顶部是UITextField,下面是一个UITableView

0
0 Comments

问题的原因是代码中使用了错误的键盘高度参数。应该使用UIKeyboardFrameEndUserInfoKey来获取键盘的高度。

代码中还存在其他问题。需要将窗口坐标转换为本地坐标,并且不能假设键盘的高度,而应该查看键盘顶部的位置。

解决方法是使用UIKeyboardFrameEndUserInfoKey来获取键盘高度,并将窗口坐标转换为本地坐标。同时,查看键盘顶部的位置来确定键盘的高度。

以下是正确的代码示例:

func keyboardWillShow(notification: NSNotification) {

if let keyboardFrame = notification.userInfo?[UIKeyboardFrameEndUserInfoKey] as? CGRect {

let keyboardFrameInView = view.convert(keyboardFrame, from: nil)

let keyboardHeight = view.bounds.height - keyboardFrameInView.origin.y

// Use the keyboardHeight variable for further calculations or adjustments

}

}

通过以上代码,可以正确获取键盘的高度,并进行后续的计算或调整操作。

0
0 Comments

问题出现的原因是,使用了错误的键(UIKeyboardFrameBeginUserInfoKey)来获取键盘的高度。正确的键是UIKeyboardFrameEndUserInfoKey,因为它会根据用户设置的偏好返回最终的高度。

解决方法是使用UIKeyboardFrameEndUserInfoKey来获取键盘的高度。此外,需要注意的是,UIKeyboardFrameEndUserInfoKey返回的高度会有两个值,第一个是没有语言预测的高度,第二个是启用了语言预测的高度。而UIKeyboardFrameBeginUserInfoKey只返回没有预测栏的高度。

对于在iPhone 5s上切换键盘时的高度问题,可以参考下面的图片。当点击UITextField时,在iPhone 7上仍然显示较大的高度(302),只有在切换软键盘的时候才能正确显示高度(260)。

文章中还提到了在模拟器中切换软键盘时获得的高度值(216和253),但实际上用户点击UITextField时返回的高度是错误的。

然而,正确的高度应该是302,而不是260。确保使用的是UIKeyboardFrameEndUserInfoKey来获取高度。

作者表示,返回的高度是302,这是不正确的。视图使用260来正确调整,而302太高了。

最后,作者指出在其项目中实现了相同的功能,并且正常工作。

0
0 Comments

当键盘出现时,键盘的高度可能会有所变化。这可能是因为用户在不同的设备上使用不同的键盘,或者用户在键盘上切换输入法时键盘的高度发生变化。

为了解决这个问题,可以使用以下方法:

1. 首先,在 Swift 2 中添加一个函数:animateViewMoving,用于将视图上移或下移。

// 上移视图

func animateViewMoving(up: Bool, moveValue: CGFloat) {

let movementDuration: NSTimeInterval = 0.3

let movement: CGFloat = (up ? -moveValue : moveValue)

UIView.beginAnimations("animateView", context: nil)

UIView.setAnimationBeginsFromCurrentState(true)

UIView.setAnimationDuration(movementDuration)

self.view.frame = CGRectOffset(self.view.frame, 0, movement)

UIView.commitAnimations()

}

2. 然后实现 UITextFieldDelegate 协议,以便在文本框的各种事件中调用 animateViewMoving 函数。

// MARK: - UITextFieldDelegate

func textFieldShouldReturn(textField: UITextField) -> Bool {

// 隐藏键盘

textField.resignFirstResponder()

return true

}

func textFieldDidEndEditing(textField: UITextField) {

// 当文本框结束编辑时,将视图下移

animateViewMoving(false, moveValue: 100)

textField.resignFirstResponder()

}

func textFieldDidBeginEditing(textField: UITextField) {

// 当文本框开始编辑时,将视图上移

animateViewMoving(true, moveValue: 100)

}

3. 可以通过以下方法获取键盘的准确高度:

var viewLiftUpValue: CGFloat

func keyboardWillShow(notification: NSNotification) {

let userInfo: NSDictionary = notification.userInfo!

let keyboardFrame: NSValue = userInfo.valueForKey(UIKeyboardFrameEndUserInfoKey) as! NSValue

let keyboardRectangle = keyboardFrame.CGRectValue()

let keyboardHeight = keyboardRectangle.height

viewLiftUpValue = keyboardHeight

}

4. 然后将获取到的键盘高度传递给 animateViewMoving 函数。

0