UIButton 与键盘一起移动。用户按键时位置重置
Posted
技术标签:
【中文标题】UIButton 与键盘一起移动。用户按键时位置重置【英文标题】:UIButton to move along with keyboard. The position resets when user presses a key 【发布时间】:2017-11-12 00:10:48 【问题描述】:我有一个用键盘移动屏幕底部的 UIButton 的函数。问题是,当用户按下一个键(开始在文本字段中写入)时,按钮会返回向下。
我尝试设置addBtn.translatesAutoresizingMaskIntoConstraints = true
这仅在我的 Xcode 将 main.storyboard 设置为模拟器时才有效,否则它会破坏约束。起初我以为这只是 Xcode 9 的错误,但后来我在 iTunes Connect 上上传了一个捆绑包,并让我的女朋友通过 TestFlight 下载该应用程序,确实在设置 translatesAutoresizingMaskIntoConstraints = true
时限制被搞砸了
func bindToKeyboard ()
NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillChange(_:)), name: NSNotification.Name.UIKeyboardWillChangeFrame , object: nil)
@objc func keyboardWillChange(_ notification : NSNotification)
let duration = notification.userInfo![UIKeyboardAnimationDurationUserInfoKey] as! Double
let curve = notification.userInfo![UIKeyboardAnimationCurveUserInfoKey] as! UInt
let startingFrame = (notification.userInfo![UIKeyboardFrameBeginUserInfoKey] as! NSValue).cgRectValue
let endingFrame = (notification.userInfo![UIKeyboardFrameEndUserInfoKey] as! NSValue).cgRectValue
let deltaY = endingFrame.origin.y - startingFrame.origin.y
UIView.animateKeyframes(withDuration: duration, delay: 0.0, options: UIViewKeyframeAnimationOptions(rawValue: curve), animations: self.frame.origin.y += deltaY
,completion: nil)
【问题讨论】:
尝试使用keyboardWillShow 和keyboardWillHide 而不是keyboardWillChange 通知。或者,查看使动画更易于管理以及键盘显示和消失的键盘附件视图。 当前的逻辑是keyboardWillChange,因为我有2个文本字段,一个数字和一个字母,所以键盘是不同的,它需要随着键盘的变化移动按钮。反正我试了你说的还是不行 【参考方案1】:好的,在与这个错误斗争 3 小时后,我禁用了自动调整蒙版,并为 bottom constraint 创建了一个 outlet。
在每个动画之后,我都用 deltaY 更新了该约束
所以我的代码现在看起来像这样
func bindToKeyboard ()
NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillChange(_:)), name: NSNotification.Name.UIKeyboardWillChangeFrame , object: nil)
@objc func keyboardWillChange(_ notification : NSNotification)
let duration = notification.userInfo![UIKeyboardAnimationDurationUserInfoKey] as! Double
let curve = notification.userInfo![UIKeyboardAnimationCurveUserInfoKey] as! UInt
let startingFrame = (notification.userInfo![UIKeyboardFrameBeginUserInfoKey] as! NSValue).cgRectValue
let endingFrame = (notification.userInfo![UIKeyboardFrameEndUserInfoKey] as! NSValue).cgRectValue
let deltaY = endingFrame.origin.y - startingFrame.origin.y
UIView.animateKeyframes(withDuration: duration, delay: 0.0, options: UIViewKeyframeAnimationOptions(rawValue: curve), animations: self.frame.origin.y += deltaY
,completion: nil)
btc.constant -= deltaY
多么愉快的星期六晚上啊!我喜欢编程!
【讨论】:
以上是关于UIButton 与键盘一起移动。用户按键时位置重置的主要内容,如果未能解决你的问题,请参考以下文章
在 UITextField 上点击时将 UIButton 移动到键盘上方
如何创建一个行为类似于 UIKeyboard(数字键盘)的 UIButton 矩阵?