如何在viewDidLoad中调整UITableView的大小?



我有一个视图控制器有两个元素:一个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))
}

最新更新