TableView(搜索结果表视图)有时会意外滚动

时间:2014-08-15 21:20:05

标签: ios objective-c iphone uitableview uisearchdisplaycontroller

我正在开发一款实现搜索显示控制器的应用。搜索结果表视图,一直表现不正常,我试图在几天内解决这个问题。这是一个行为的屏幕录制。

scroll Issue in search results table view

我没有修改表格视图的边框或边界。当搜索字段中没有文本并调用[searchDisplayController setActive: animated: ]方法时,我只会让第一响应者辞职。

请帮帮我。

6 个答案:

答案 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为我们做了这件事。确实,键盘缺少计算问题,所以当键盘运行时,我只需将contentInsetscrollIndicatorInsets设置回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

的回答