我有通过AutoLayout设置的tableView大小(从底部到底部布局指南,顶部到另一个视图等等,但首先是UISearchBar到顶部布局指南):
带有tableView的控制器:
我需要在显示键盘时更改表偏移量,所以我有两种方法:
// MARK: - Keyboard
func keyboardWasShown (notification: NSNotification) {
let info: NSDictionary = notification.userInfo!
let value: NSValue = info.valueForKey(UIKeyboardFrameBeginUserInfoKey) as! NSValue
let keyboardSize: CGSize = value.CGRectValue().size
self.tableView.contentInset = UIEdgeInsetsMake(0, 0, keyboardSize.height, 0)
self.tableView.scrollIndicatorInsets = self.tableView.contentInset
}
func keyboardWillBeHidden (notification: NSNotification) {
self.tableView.contentInset = UIEdgeInsetsZero
self.tableView.scrollIndicatorInsets = UIEdgeInsetsZero
}
它正在工作但是键盘显示时我遇到了问题。无法选择最后一项,而不是我之前获得的项目。我点击了最后一项的位置,它应该导航到最后一项的详细页面,但我看到了上一项的详细页面。所有项目都不会转移,但仅限于最后一项,当我过滤到只有一项时,它可以正常工作。当键盘被隐藏(并且物品仍被过滤)时,它也可以(它选择正确的东西)。所以我想问题必须在这里:
self.tableView.contentInset = UIEdgeInsetsMake(0, 0, keyboardSize.height, 0)
self.tableView.scrollIndicatorInsets = self.tableView.contentInset
那么哪里可能有问题?谢谢你的帮助
答案 0 :(得分:4)
我得到了解决方案。我使用UIKeyboardWillHideNotification
并在keyboardWillBeHidden
之前调用了方法didSelectRowAtIndexPath
,因此contentInset
的{{1}}被设置回tableView
然后出现错误的indexPath 。现在我使用UIEdgeInsetsZero
代替keyboardDidHide
:
keyboardWillBeHidden
答案 1 :(得分:1)
因此,假设Preset.set
存储键盘高度(注意因为键盘框架可能因设备而异),请尝试以下操作:
~~~
在键盘隐藏时执行相同操作(但将keyboardHeight
替换为CGRect *frame = [tableView frame];
frame.size.height -= keyboardHeight;
[tableView setFrame:frame]
)。