搜索栏未在iPhone 4S上显示

时间:2016-01-27 17:12:00

标签: ios objective-c iphone storyboard uisearchbar

我正用这个把头发拉出来。我在故事板中创建了这个视图:

enter image description here

当我在iPhone 5S上运行它工作正常时,搜索栏就会显示出来。但是当我在iPhone 4S上运行时,搜索栏不会显示,如下图所示: enter image description here

在模拟器上运行会以任一尺寸正确显示搜索栏。在我的viewDidLoad中,我有以下代码:

- (void)viewDidLoad {
    [super viewDidLoad];

    [self.processTableView setDelegate:self];
    [self.processTableView setDataSource:self];

    self.searchController = [[UISearchController alloc] initWithSearchResultsController:nil];
    self.searchController.searchResultsUpdater = self;
    self.processTableView.tableHeaderView = self.searchController.searchBar;

    self.definesPresentationContext = YES;
}

我刚发现我的问题与第self.processTableView.tableHeaderView = self.searchController.searchBar;行有关,但我不明白为什么。有没有人知道这里发生了什么?

4 个答案:

答案 0 :(得分:1)

你试过试试吗? self.definesPresentationContext = YES;

这是我实现它的方式:

  self.searchController =
      [[UISearchController alloc] initWithSearchResultsController:nil];
  self.searchController.searchResultsUpdater = self;
  self.searchController.dimsBackgroundDuringPresentation = NO;

  self.searchController.searchBar.delegate = self;
  self.tableView.tableHeaderView = self.searchController.searchBar;
  self.definesPresentationContext = YES;
  [self.searchController.searchBar sizeToFit];
  self.searchController.hidesNavigationBarDuringPresentation = NO;

答案 1 :(得分:1)

我使用了@ user1079052提供的部分代码:

[self.searchController.searchBar sizeToFit];
self.searchController.hidesNavigationBarDuringPresentation = NO;

将其添加到我现有的代码中,使得iPhone 4S上的搜索栏可见,并在iPhone 5S上保持相同的行为。但是,搜索栏显示在表视图上。为了解决这个问题,我计算了条形高度并重新设置。所以,我的viewDidLoad看起来像这样:

- (void)viewDidLoad {
    [super viewDidLoad];

    [self.processTableView setDelegate:self];
    [self.processTableView setDataSource:self];

    self.searchController = [[UISearchController alloc] initWithSearchResultsController:nil];
    self.searchController.searchResultsUpdater = self;
    self.searchController.dimsBackgroundDuringPresentation = NO;
    self.processTableView.tableHeaderView = self.searchController.searchBar;

    [self.searchController.searchBar sizeToFit];
    self.searchController.hidesNavigationBarDuringPresentation = NO;

    CGFloat height = [self.searchController.searchBar systemLayoutSizeFittingSize:UILayoutFittingCompressedSize].height;
    CGRect frame = self.searchController.searchBar.frame;
    frame.size.height = height;
    self.searchController.searchBar.frame = frame;
    self.processTableView.tableHeaderView = self.searchController.searchBar;
}

我要感谢所有回复。

答案 2 :(得分:0)

我认为您应该将searchController的搜索栏添加到headerView,而不是将HeaderView设置为searchBar。类似的东西:

[self.processTableView.tableHeaderView addSubview:self.searchController.searchBar];

如果您这样做,则意味着可以从故事板中删除searchBar。

答案 3 :(得分:0)

如果在向下滚动时看到后面的栏,应该是一个约束问题。尝试删除manualy约束(不是"明确约束")。