UISearchBar向下移动20个像素

Col*_*lin 13 uisearchbar uisearchdisplaycontroller ios

我有一个UITableViewController包含a UISearchDisplayControllerUISearchBar标准方式的T (在nib中定义的所有内容).然后由一些其他视图控制器以标准方式将T包含为子视图控制器.

搜索栏正确显示:

普通搜索栏

但当我点击搜索栏实际搜索时,搜索栏会变得更高,搜索栏内的内容会下降大约20像素(呃,状态栏的高度?巧合?)就像这样:

奇怪的搜索栏太高了

那是怎么回事?太高了.此外,使它看起来像这样的动画是笨拙的.有什么方法可以防止这种难看的增长?

Chr*_*aze 8

我设法解决了一个非常类似的问题,通过以编程方式设置你正在经历的问题UISearchController:

注意〜如果hidesNavigationBarDuringPresentation未设置为NO,则错误仍然存​​在.

#pragma mark - View Life Cycle

- (void)viewDidLoad {
    [super viewDidLoad];

    self.results = [[NSArray alloc] init];

//  1  \\ Results Table View
    UITableView *searchResultsTableView = [[UITableView alloc] initWithFrame:self.tableView.frame];
    [searchResultsTableView registerClass:[UITableViewCell class] forCellReuseIdentifier:Identifier];
    searchResultsTableView.delegate = self;
    searchResultsTableView.dataSource = self;

//  2  \\ init search results table view & setting its table view
    self.searchResultsTableViewController = [[UITableViewController alloc] init];
    self.searchResultsTableViewController.tableView = searchResultsTableView;
    self.searchResultsTableViewController.view.backgroundColor = [UIColor blackColor];

//  3  \\ init a search controller with it's tableview controller for results
    self.searchController = [[UISearchController alloc] initWithSearchResultsController:self.searchResultsTableViewController];
    self.searchController.hidesNavigationBarDuringPresentation = NO;    //  ?
    self.searchController.searchResultsUpdater = self;
    self.searchController.delegate = self;
    self.searchController.searchBar.barTintColor = [UIColor blackColor];

//  4  \\ Make an appropriate search bar (size, color, attributes) and add it as the header
    [self.searchController.searchBar sizeToFit];
    self.tableView.tableHeaderView = self.searchController.searchBar;
    self.tableView.tableHeaderView.backgroundColor = [UIColor blackColor];

//  5  \\ Enable presentation context
    self.definesPresentationContext = YES;
    self.tableView.backgroundColor = [UIColor clearColor];
    self.currentUser = [PFUser currentUser];
}
Run Code Online (Sandbox Code Playgroud)

添加更多详情:

  1. Interface Builder:UIViewController(不是UITableViewController)
  2. 添加UITableView约束条件:

    一个. 在此输入图像描述

    *我的导航栏是自定义高度 - 您的"顶部空间:顶部布局指南"可能会更改

  3. 将添加的表视图中的委托和数据源出口添加到UIViewController

    一个.不要忘记以编程方式执行此操作:

    @interface AddUsersViewController : UIViewController <UITableViewDelegate, UITableViewDataSource>
    
    @property (weak, nonatomic) IBOutlet UITableView *tableView;
    
    Run Code Online (Sandbox Code Playgroud)
  4. 在您的界面扩展中:

    一个.设置您UISearchConroller的代理和数据源:

    #import "AddUsersViewController.h"
    
    #define ResultsTableView self.searchResultsTableViewController.tableView
    #define Identifier @"Cell"
    
    @interface AddUsersViewController () <UISearchControllerDelegate, UISearchResultsUpdating>
    
    @property (nonatomic) UISearchController *searchController;
    @property (nonatomic) UITableViewController *searchResultsTableViewController;
    @property (nonatomic, weak) UIBarButtonItem *leftBarButton;
    @property (nonatomic) NSArray *results;
    
    @end
    
    Run Code Online (Sandbox Code Playgroud)

虽然这对我有用,但我发现还有其他可能造成这种情况的情况.我的"问题"并不是搜索栏向下移动了20px(左右),而是向上移动了.我把它归因于一个自定义的UINavigationBar头,其中包括一个图像标题和自定义的NavBarButtons.考虑到这一点,这里有两个可能的解决方案:

.

原始场景:

  1. 您的Container View的extendedLayoutIncludesOpaqueBars属性

    一个.故事板:在故事板中检查 √"在不透明的条形图下".

    以编程方式:yourTableView(s).extendedLayoutIncludesOpaqueBars= YES;

.

  1. 设置scopeButtonTitles空数组.(下面)

    self.searchController = UISearchController(searchResultsController: nil);
    self.searchController.searchResultsUpdater = self;
    self.searchController.searchBar.scopeButtonTitles = [];
    self.tableView.tableHeaderView = self.searchController.searchBar;
    
    Run Code Online (Sandbox Code Playgroud)

后两个答案来自这个问题,并且可能证明在检查中也是有益的.

感谢BananaNeil的研究和测试,他发现如果你按照我的建议设置你searchController.searchBar.y = 0的搜索栏应该是你希望它的确切位置.√


Ked*_*ape 6

不确定这是否是iOS 9特定,但设置

searchController.hidesNavigationBarDuringPresentation = NO;

解决UISearchBar了整个遏制的怪异向下运动的问题UITableView.当然,这禁用导航栏 - 所以这可能不是你想要的.