如何防止searchResultsTableView在搜索时移动

时间:2014-12-18 23:35:45

标签: ios cocoa-touch ios7

免责声明:我的目标是iOS 7.我意识到UISearchDisplayController在iOS8中已弃用,但它是我需要使用的。

我隐藏了标准导航栏。在UIView下面,我有一个UISearchBar和一个UITableView。它看起来像这样:

enter image description here

当我尝试搜索时,结果过滤得很好,但是searchResultsTableView会飞到屏幕顶部。

enter image description here

UISearchBar保留在同一个地方,但tableView会移动以覆盖整个屏幕。

我试图阻止tableView移动。理想的行为是让UISearchBar和searchResultsTableView保持不变

到目前为止我已尝试过:

  1. 我通过代表们查看是否可以轻松禁用并且无法找到任何内容。
  2. 我正在使用Autolayout,因此以编程方式设置约束以移动searchResultTableView的顶部将是合乎逻辑的。
  3. (请原谅格式化)

      

    - (void)searchDisplayController:(UISearchDisplayController   *)controller didShowSearchResultsTableView:(UITableView *)tableView {

     NSDictionary * views = @{ @"searchResultsTableView" : self.searchDisplayController.searchResultsTableView};
    
    NSArray * topConstraint = [NSLayoutConstraint
                               constraintsWithVisualFormat:@"V:|-64-[searchResultsTableView]-|"
                               options:0
                               metrics:nil
                               views:views];
    [self.searchDisplayController.searchResultsTableView.superview addConstraints:topConstraint]; }
    

    我也尝试将约束添加到" willShowSearchResultsTableView" 我不熟悉以编程方式添加约束,因此可能是问题的根源。

    1. 我知道我可以通过将TableView和SearchBar放在ContainerView中来解决问题,但是我试图避免这样做,因为这样做是多余和浪费的。
    2. 先谢谢大家!

1 个答案:

答案 0 :(得分:0)

事实证明,答案二是正确的。我在调试器日志中发现NSAutoresizingMaskLayoutConstraint打破了我试图强加给searchResultsTableView的NSLayoutConstraint

   self.searchDisplayController.searchResultsTableView.translatesAutoresizingMaskIntoConstraints = NO;

此行通过将掩码关闭为约束直接转换来解决此问题。我把它放在viewDidLoad中然后我自己的自定义约束被遵循。