免责声明:我的目标是iOS 7.我意识到UISearchDisplayController在iOS8中已弃用,但它是我需要使用的。
我隐藏了标准导航栏。在UIView下面,我有一个UISearchBar和一个UITableView。它看起来像这样:
当我尝试搜索时,结果过滤得很好,但是searchResultsTableView会飞到屏幕顶部。
UISearchBar保留在同一个地方,但tableView会移动以覆盖整个屏幕。
我试图阻止tableView移动。理想的行为是让UISearchBar和searchResultsTableView保持不变
到目前为止我已尝试过:
(请原谅格式化)
- (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" 我不熟悉以编程方式添加约束,因此可能是问题的根源。
先谢谢大家!
答案 0 :(得分:0)
事实证明,答案二是正确的。我在调试器日志中发现NSAutoresizingMaskLayoutConstraint
打破了我试图强加给searchResultsTableView的NSLayoutConstraint
。
self.searchDisplayController.searchResultsTableView.translatesAutoresizingMaskIntoConstraints = NO;
此行通过将掩码关闭为约束直接转换来解决此问题。我把它放在viewDidLoad中然后我自己的自定义约束被遵循。