Ios 如何在搜索时防止searchResultsTableView移动

Ios 如何在搜索时防止searchResultsTableView移动,ios,cocoa-touch,ios7,Ios,Cocoa Touch,Ios7,免责声明:我的目标是iOS 7。我意识到iSearchDisplayController在iOS8中不受欢迎,但这正是我需要使用的 我隐藏了标准导航栏。在UIView下面,我有一个UISearchBar和一个UITableView。看起来是这样的: 当我尝试搜索时,结果过滤良好,但searchResultsTableView会飞到屏幕顶部 UISearchBar保持在原来的位置,但tableView会移动以覆盖整个屏幕 我试图阻止tableView移动。所需的行为是使UISearchBar和

免责声明:我的目标是iOS 7。我意识到iSearchDisplayController在iOS8中不受欢迎,但这正是我需要使用的

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

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

UISearchBar保持在原来的位置,但tableView会移动以覆盖整个屏幕

我试图阻止tableView移动。所需的行为是使UISearchBar和searchResultsTableView保持原位

到目前为止,我所尝试的:

  • 我查看了代表们的搜索,看看这是否可以很容易地禁用,但找不到任何东西
  • 我使用的是Autolayout,因此以编程方式设置约束以移动searchResultTableView的顶部是合乎逻辑的 (请原谅格式错误)

    -(void)searchDisplayController:(UISearchDisplayController) *)控制器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”中 我不熟悉以编程方式添加约束,因此这可能是问题的根源

  • 我知道我可以通过将TableView和SearchBar放在ContainerView中来解决这个问题,但我试图避免这样做,因为这是多余和浪费的

  • 提前感谢大家!

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

       self.searchDisplayController.searchResultsTableView.translatesAutoresizingMaskIntoConstraints = NO;
    
    这一行通过将掩码关闭为约束直接转换来解决问题。我将其放入viewDidLoad中,然后遵循我自己的自定义约束