好的,我正在尝试在我的视图中实现添加评论框。这是布局:
我的UITabBarController
包含UINavigationController
,其UIViewController
被推送到UITableView
。视图布局由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
}
。
我正在监控键盘通知,这是我的代码:
IQKeyboardManager
当键盘显示时,我设置了断点并看到y坐标已更新,但我的视图保持在原位,隐藏在键盘后面。
一些笔记。我正在使用PureLayout
并禁用此类的距离处理。我还使用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
另一方面,这在另一个我不具备open System.Reflection
module Something =
let toQueryString x =
let formatElement (pi : PropertyInfo) =
sprintf "%s=%O" pi.Name <| pi.GetValue x
x.GetType().GetProperties()
|> Array.map formatElement
|> String.concat "&"
的孩子的观点中完美运作。
正在发生的事情的屏幕截图:
带有输入视图的视图:
显示键盘时:
非常感谢任何帮助。
答案 0 :(得分:1)
对于您没有应用约束的视图,您需要告诉自动布局引擎您将在设置帧之前使用帧。您可以将translatesAutoresizingMaskIntoConstraints
设置为true来执行此操作。例如:
override func viewWillLayoutSubviews() {
let y = self.view.frame.height - 44
self.tableView.translatesAutoresizingMaskIntoConstraints = true
self.tableView.frame = CGRectMake(0, 0, self.view.frame.width, y)
self.inputPanel.translatesAutoresizingMaskIntoConstraints = true
self.inputPanel.frame = CGRectMake(0, y, self.view.frame.width, 44)
}
答案 1 :(得分:0)
尝试将此代码从viewWillLayoutSubviews
移至viewDidLoad
功能
override func viewDidLoad() {
super.viewDidLoad()
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)
}
我想在键盘出现事件后调用了viewWillLayoutSubviews
函数。
答案 2 :(得分:0)
尝试使用UIKeyboardFrameEndUserInfoKey代替UIKeyboardFrameBeginUserInfoKey