我有一个视图控制器有两个元素:一个UITableView
和一个UIView
包含一个UITextField
。我还使用IQKeyboardManager
库,以便我的UITextField
是可见的。下面是控制它们的代码:
override func viewDidLoad() {
super.viewDidLoad()
self.hideKeyboardWhenTappedAround()
tableView.register(UINib(nibName: "CommentCell", bundle: nil), forCellReuseIdentifier: "CommentCell")
tableView.dataSource = self
self.view.addSubview(tableView)
commentTextField.delegate = self
NotificationCenter.default.addObserver(self,
selector: #selector(handle(keyboardShowNotification:)),
name: UIResponder.keyboardDidShowNotification,
object: nil)
let textFieldHeight = commentCompositionView.frame.size.height
let navBarHeight = navigationController?.navigationBar.frame.size.height ?? 0.0
tableView.frame = CGRect(x: 0, y: keyboardHeight, width: screenSize.width, height: screenSize.height - (textFieldHeight + navBarHeight + keyboardHeight + 20))
print("Did load: (tableView.frame.size.height)")
}
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(true)
commentTextField.becomeFirstResponder()
print("Did Appear: (tableView.frame.size.height)")
}
func textFieldDidBeginEditing(_ textField: UITextField) {
let textFieldHeight = commentCompositionView.frame.size.height
let navBarHeight = navigationController?.navigationBar.frame.size.height ?? 0.0
tableView.frame = CGRect(x: 0, y: keyboardHeight, width: screenSize.width, height: screenSize.height - (textFieldHeight + navBarHeight + keyboardHeight + 20))
print("Did begin: (tableView.frame.size.height)")
}
func textFieldDidEndEditing(_ textField: UITextField) {
let textFieldHeight = commentCompositionView.frame.size.height
let navBarHeight = navigationController?.navigationBar.frame.size.height ?? 0.0
tableView.frame = CGRect(x: 0, y: 0, width: screenSize.width, height: screenSize.height - (textFieldHeight + navBarHeight + 20))
print("Did end: (tableView.frame.size.height)")
}
我的问题是,当视图加载UITableView
的高度太大,我无法看到表视图的顶部。当我点击退出,然后回到UITableView
它工作得很好,但第一次加载不工作。
这里是视图加载的输出示例,我单击UITextField
,然后单击回到它:
Did load: 465.0
Did begin: 465.0
Did Appear: 465.0
Did end: 465.0
Did begin: 211.0
Did end: 465.0
Did begin: 211.0
在我看来,假设我在viewDidLoad
中设置高度,那么前三个打印语句应该是211.0
。我做错了什么?
编辑
我发现问题是什么,但不确定如何解决它。当视图第一次加载时,keyboardHeight
是0.0。直到我关闭并重新打开键盘,它才给我一个准确的数字。
我用这个答案得到keyboardHeight
我的问题是我需要在viewDidAppear
中设置UITableView
的高度,一旦我这样做了,我的问题就解决了:
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(true)
commentTextField.becomeFirstResponder()
let textFieldHeight = commentCompositionView.frame.size.height
let navBarHeight = navigationController?.navigationBar.frame.size.height ?? 0.0
tableView.frame = CGRect(x: 0, y: keyboardHeight, width: screenSize.width, height: screenSize.height - (textFieldHeight + navBarHeight + keyboardHeight + 20))
}