获取键盘工具栏高度
Posted
技术标签:
【中文标题】获取键盘工具栏高度【英文标题】:Get Keyboard Toolbar Height 【发布时间】:2019-02-20 10:37:14 【问题描述】:我有同样的问题: iPhone Keyboard with accessory view height problems
但答案没有新的解决方案,也没有解决任何问题!
【问题讨论】:
【参考方案1】:我找到了一个很好的解决方案Here
做了一些更改并将其更新到 swift 4.2。
需要说明的几点
-
创建了从 Storyboard 到 ViewController 的文本字段和底部约束的出口
底部约束用于上下移动文本字段。
class ViewController: UIViewController
@IBOutlet weak var inputField: UITextField!
@IBOutlet weak var textFieldBottomContraint: NSLayoutConstraint!
override func viewDidLoad()
super.viewDidLoad()
self.setUpKeyBoardNotifications()
self.addToolBarTo(uiElement: self.inputField)
func setUpKeyBoardNotifications()
NotificationCenter.default.addObserver(self,
selector: #selector(self.keyboardNotification(notification:)),
name: UIResponder.keyboardWillChangeFrameNotification,
object: nil)
func addToolBarTo(uiElement element:UITextField)
let numberToolbar = UIToolbar(frame:CGRect(x: 0, y: 0, width: UIScreen.main.bounds.width, height: 45))
numberToolbar.barStyle = .black
numberToolbar.items = [
UIBarButtonItem(title: "Cancel", style: .plain, target: self, action: #selector(ViewController.cancelAction)),
UIBarButtonItem(barButtonSystemItem: .flexibleSpace, target: nil, action: nil),
UIBarButtonItem(title: "Done", style: .plain, target: self, action: #selector(ViewController.doneAction))]
numberToolbar.sizeToFit()
element.inputAccessoryView = numberToolbar
@objc func keyboardNotification(notification: NSNotification)
if let userInfo = notification.userInfo
let endFrame = (userInfo[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue)?.cgRectValue
let endFrameY = endFrame?.origin.y ?? 0
let duration:TimeInterval = (userInfo[UIResponder.keyboardAnimationDurationUserInfoKey] as? NSNumber)?.doubleValue ?? 0
let animationCurveRawNSN = userInfo[UIResponder.keyboardAnimationCurveUserInfoKey] as? NSNumber
let animationCurveRaw = animationCurveRawNSN?.uintValue ?? UIView.AnimationOptions.curveEaseInOut.rawValue
let animationCurve:UIView.AnimationOptions = UIView.AnimationOptions(rawValue: animationCurveRaw)
if endFrameY >= UIScreen.main.bounds.size.height
self.textFieldBottomContraint?.constant = 0.0
else
self.textFieldBottomContraint?.constant = endFrame?.size.height ?? 0.0
UIView.animate(withDuration: duration,
delay: TimeInterval(0),
options: animationCurve,
animations: self.view.layoutIfNeeded() ,
completion: nil)
@objc func cancelAction()
self.inputField.resignFirstResponder()
@objc func doneAction()
self.inputField.resignFirstResponder()
deinit
NotificationCenter.default.removeObserver(self)
【讨论】:
以上是关于获取键盘工具栏高度的主要内容,如果未能解决你的问题,请参考以下文章