【问题标题】:How to prevent searchResultsTableView from moving when searching搜索时如何防止searchResultsTableView移动
【发布时间】:2015-02-17 21:23:08
【问题描述】:

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

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

当我尝试搜索时,结果过滤正常,但 searchResultsTableView 飞到屏幕顶部。

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

我试图阻止 tableView 移动。期望的行为是让 UISearchBar 和 searchResultsTableView 保持原位

到目前为止我已经尝试过:

  1. 我查看了代表以寻找是否可以轻松禁用它并且找不到任何东西。
  2. 我正在使用 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” 我不熟悉以编程方式添加约束,因此这可能是问题的根源。

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

提前谢谢大家!

【问题讨论】:

    标签: ios cocoa-touch ios7


    【解决方案1】:

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

       self.searchDisplayController.searchResultsTableView.translatesAutoresizingMaskIntoConstraints = NO;
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-06-04
      • 1970-01-01
      • 2020-04-21
      • 2018-02-07
      • 1970-01-01
      • 2018-05-31
      • 1970-01-01
      • 2017-05-30
      相关资源
      最近更新 更多