使用交互式键盘解雇时无法获得键盘高度

时间:2018-01-19 10:15:53

标签: ios swift keyboard

我一直在努力实现像“iMessages”这样的交互式键盘。 app这样的东西;
This

向上或向下滑动时,我需要不断获得精确的键盘框架。

我已经尝试过;
keyboardWillChangeFrame,keyboardDidChangeFrame,keyboardWillShowForResizing,keyboardWillHideForResizing,keyboardWillShow,keyboardWillBeHidden

它们都没有连续返回帧。抓住那个框架的最佳方法是什么?

1 个答案:

答案 0 :(得分:1)

这是一个棘手的问题。简单。

ViewController继承UIResponder

open class UIViewController : UIResponder, NSCoding, UIAppearanceContainer, UITraitEnvironment, UIContentContainer, UIFocusEnvironment

所以它可以成为第一响应者,因为它也可以有输入附件视图。

你要做的是

1)转到故事板 - > ViewController然后选择你的tableview并将键盘消除类型更改为

enter image description here

2)在你的Viewcontroller中

添加以下代码

var viewAcc : UIView? // That contains TextFied and send button

override var inputAccessoryView: UIView? {
    return viewAcc
}



override var canBecomeFirstResponder: Bool {
    return true
}

对于你我创建了简单的Textfield和发送按钮,例如你可以用你的

修改它
 func setupView () {


    self.tblChatDetail.contentInset = UIEdgeInsetsMake(0, 0, 20, 0)


    viewAcc = UIView(frame: CGRect(x: 0, y: 0, width: UIScreen.main.bounds.width, height: 44))
    viewAcc?.backgroundColor = UIColor.white

    textView = UITextView (frame: CGRect(x:0, y:0, width:0,height: 44 - 0.5))
    textView.textContainerInset = UIEdgeInsetsMake(4, 3, 3, 3)
    textView.delegate = self
    viewAcc?.backgroundColor = .lightGray


    viewAcc?.addSubview(textView);

    sendButton = UIButton(type: .system)
    sendButton.isEnabled = true
    sendButton.titleLabel?.font = UIFont.boldSystemFont(ofSize: 17)
    sendButton.setTitle("Send", for: .normal)
    sendButton.contentEdgeInsets = UIEdgeInsets(top: 6, left: 6, bottom: 6, right: 6)
    sendButton.addTarget(self, action: #selector(ChatDetailViewController.sendMessage), for: UIControlEvents.touchUpInside)
    viewAcc?.addSubview(sendButton)


    textView.translatesAutoresizingMaskIntoConstraints = false
    sendButton.translatesAutoresizingMaskIntoConstraints = false
    viewAcc?.addConstraint(NSLayoutConstraint(item: textView, attribute: .left, relatedBy: .equal, toItem: viewAcc, attribute: .left, multiplier: 1, constant: 8))
    viewAcc?.addConstraint(NSLayoutConstraint(item: textView, attribute: .top, relatedBy: .equal, toItem: viewAcc, attribute: .top, multiplier: 1, constant: 7.5))
    viewAcc?.addConstraint(NSLayoutConstraint(item: textView, attribute: .right, relatedBy: .equal, toItem: sendButton, attribute: .left, multiplier: 1, constant: -2))
    viewAcc?.addConstraint(NSLayoutConstraint(item: textView, attribute: .bottom, relatedBy: .equal, toItem: viewAcc, attribute: .bottom, multiplier: 1, constant: -8))
    viewAcc?.addConstraint(NSLayoutConstraint(item: sendButton, attribute: .right, relatedBy: .equal, toItem: viewAcc, attribute: .right, multiplier: 1, constant: 0))
    viewAcc?.addConstraint(NSLayoutConstraint(item: sendButton, attribute: .bottom, relatedBy: .equal, toItem: viewAcc, attribute: .bottom, multiplier: 1, constant: -4.5))


}

跑步吧!