我正在开发一款实现搜索显示控制器的应用。搜索结果表视图,一直表现不正常,我试图在几天内解决这个问题。这是一个行为的屏幕录制。
我没有修改表格视图的边框或边界。当搜索字段中没有文本并调用[searchDisplayController setActive: animated: ]
方法时,我只会让第一响应者辞职。
请帮帮我。
答案 0 :(得分:10)
当键盘隐藏时,不要设置searchResultsTableView的scrollIndicatorInsets和contentInsets,而是将它放在'willShowSearchResultsTableView:'委托方法中为我修复它:
- (void)searchDisplayController:(UISearchDisplayController *)controller willShowSearchResultsTableView:(UITableView *)tableView
{
[tableView setContentInset:UIEdgeInsetsZero];
[tableView setScrollIndicatorInsets:UIEdgeInsetsZero];
}
答案 1 :(得分:1)
使用我自己的TableView而不是SearchResultsDisplayController的表视图解决了这个问题。在我之前的tableview上放置一个新的tableview,并根据搜索栏的代表(textDidChange)显示和隐藏搜索表视图。
我采用了这种解决方法,因为我未能解决SearchResultsTableView中布局问题的奥秘。
答案 2 :(得分:1)
我得到了一个看似非常相似的行为,但它只发生在设备(iPhone或iPad)中,而不是在模拟器中(在iOS 8,Xcode 6.0.1中,使用Swift)。
出于某种原因,在输入搜索文本时,我的contentInset.bottom
的{{1}}和scrollIndicatorInsets.bottom
在解除键盘后没有返回其原始值。每次键盘显示然后被解除时,键值的高度都会增加,而且空间会越来越大。我不知道是什么导致这种情况,因为我从来没有在代码中使用插件。我怀疑这是一个奇怪的约束干扰,但我找不到它。
为我解决的问题是,只要键盘被解除,就以编程方式将底部插入设置为零:
searchResultsTableView
我知道这只是一种解决方法。希望它对你的情况有所帮助。
答案 3 :(得分:1)
我和@ricardoaraujo非常相似,但发现当我向下滚动到列表底部时,最后几个单元格不在屏幕底部(约200px值,因此1 x keyboard.height )。
searchResultsTableView的框架是完美的(通过记录和使用新的Debug View Hierarchy模式进行检查),并且contentInset设置为UIEdgeInsetsZero。
你可能会注意到同样的事情,但是如果没有创建你自己的UITableView来显示结果(就像在@Vignesh的回答中那样),那么似乎并没有很好的解决方法。
这在iOS7上不会发生,所以希望在iOS8.0.3中修复。将检查雷达。
答案 4 :(得分:0)
@Vignesh很好,你解决了问题,但UISearchDisplayController
为我们做了这件事。确实,键盘缺少计算问题,所以当键盘运行时,我只需将contentInset
和scrollIndicatorInsets
设置回UIEdgeInsetsZero
。
func searchDisplayController(controller: UISearchDisplayController, didHideSearchResultsTableView tableView: UITableView) {
NSNotificationCenter.defaultCenter().removeObserver(self, name: UIKeyboardDidHideNotification, object: nil)
}
func searchDisplayController(controller: UISearchDisplayController, willShowSearchResultsTableView tableView: UITableView) {
NSNotificationCenter.defaultCenter().addObserver(self, selector: "keyboardWillHide", name: UIKeyboardDidHideNotification, object: nil)
}
func keyboardWillHide() {
let tableView = self.searchController.searchResultsTableView
tableView.contentInset = UIEdgeInsetsZero
tableView.scrollIndicatorInsets = UIEdgeInsetsZero
}
这只是另一种解决方法,但到目前为止它在iOS7 +上运行良好
答案 5 :(得分:0)
Swift版本:
slideDown()
基于@ user2795503
的回答