我有UITableView
动态内容(消息)。有时我必须向用户UITextField
显示,以便输入内容。
为此,我创建了特殊UIView
,并将此UIView
放入我的TableFooterView
。
如果用户想要回答,则必须按下按钮。在这种情况下,将显示footerView:
if self.tableView != nil {
if self.keyboardHeight == 0 {
self.tableView.frame = CGRect(x: 0, y: 64, width: screenWidth, height: screenHeight - tabBarHeight - navigationBarHeight - 48 - self.keyboardHeight)
self.scrollToBottom()
} else {
self.tableView.frame = CGRect(x: 0, y: 64, width: screenWidth, height: screenHeight - tabBarHeight - navigationBarHeight - self.keyboardHeight)
self.scrollToBottom()
}
self.scrollToBottomWithFooter()
self.keyboardHeight
是真正的keyboardHeight
:
func keyboardWillShow(notification: NSNotification) {
if let keyboardSize = (notification.userInfo?[UIKeyboardFrameBeginUserInfoKey] as? NSValue)?.cgRectValue {
keyboardHeight = keyboardSize.height
self.showUserTextInput()
}
}
self.scrollToBottom
只是一个将TableView
滚动到最后一个可见行的函数。
self.scrollToBottomWithFooter
不会滚动任何内容,我需要这个来显示页脚:
func scrollToBottomWithFooter() {
self.tableView.scrollRectToVisible(self.tableView.convert((self.tableView.tableFooterView?.bounds)!, from: self.tableView.tableFooterView), animated: true)
}
所以,问题是在这种情况下页脚没有正确显示。在self.keyboardHeight == 0
(即用户尚未点击UITextField
)时正确显示,但如果显示键盘,则此脚注视图未正确显示,键盘后面还有几个像素。
UITableView.frame
在这里不应该受到指责,因为用户很容易做到正确(只需手动滚动一点,并且有效),但它仍然很难看。
我在这里打破了什么?