好的,所以我试图在我的视图中实现一个添加评论框。这是布局:
我有一个UITabBarController
包含UINavigationController
我UIViewController
的被推到的地方。视图布局由 a和一个包含 a和UITableView
a 的自定义组成。UIView
UITextView
UIButton
我正在监视键盘通知,这是我拥有的代码:
override func viewDidAppear(animated: Bool) {
NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(keyboardWillAppear), name: UIKeyboardWillShowNotification, object: nil)
NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(keyboardWillDisappear), name: UIKeyboardWillHideNotification, object: nil)
}
override func viewDidDisappear(animated: Bool) {
NSNotificationCenter.defaultCenter().removeObserver(self)
}
func keyboardWillAppear(notification: NSNotification){
if let keyboardSize = (notification.userInfo?[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.CGRectValue() {
var frame = inputPanel.frame
frame.origin.y = self.view.frame.height - (keyboardSize.height + inputPanel.frame.size.height)
inputPanel.frame = frame
}
}
func keyboardWillDisappear(notification: NSNotification){
var frame = inputPanel.frame
frame.origin.y = self.view.frame.height - inputPanel.frame.size.height
inputPanel.frame = frame
}
当键盘显示时,我设置了断点并看到 y 坐标已更新,但我的视图保持在原来的位置,隐藏在键盘后面。
一些笔记。我正在使用IQKeyboardManager
并且禁用了此类的距离处理。我也PureLayout
用于在 custom 中布置控件UIView
。我没有为UIView
视图控制器中的自定义设置任何约束。UITableView
和自定义的位置UIView
在viewWillLayoutSubview
方法中设置如下:
override func viewWillLayoutSubviews() {
let y = self.view.frame.height - 44
self.tableView.frame = CGRectMake(0, 0, self.view.frame.width, y)
self.inputPanel.frame = CGRectMake(0, y, self.view.frame.width, 44)
}
另一方面,这在我认为不是UINavigationController
.
正在发生的事情的屏幕截图:
带有输入视图的视图:
显示键盘时:
任何帮助是极大的赞赏。