【问题标题】:Search Bar not showing on iPhone 4SiPhone 4S 上不显示搜索栏
【发布时间】:2016-05-04 18:46:19
【问题描述】:

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

当我在 iPhone 5S 上运行时,它运行良好,搜索栏显示正常。但是当我在 iPhone 4S 上运行时,搜索栏没有显示,如下图所示:

在模拟器上运行可以正确显示任一尺寸的搜索栏。在我的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; 行有关,但我不明白为什么。有人知道这里发生了什么吗?

【问题讨论】:

  • 你试过向下滚动吗?滚动条可能会在导航栏后面。
  • 嗨,T 先生,是的,我滚动查看它是否落后,但什么也没有。我还尝试将其添加到 TableView 中,但使用 'self.processTableView.tableHeaderView = self.searchController.searchBar;' 行,它没有显示。
  • 试试这个,选择你的tableview,然后选择clear constraints。然后选择Reset to Suggested Constraints。(从Resolve Auto Layout issues中选择这些)
  • 另外,有人能解释一下我做错了什么导致被否决了吗?

标签: ios objective-c iphone storyboard uisearchbar


【解决方案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;

【讨论】:

  • 嗨,我已经定义了definesPresentationContext,但您的回答帮助我测试了其他一些情况。谢谢!
【解决方案2】:

我使用了@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;
}

感谢所有的回复。

【讨论】:

    【解决方案3】:

    我认为您应该将 searchController 的搜索栏添加到 headerView 而不是将 HeaderView 设置为 searchBar。比如:

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

    如果您这样做,则意味着可以从情节提要中删除 searchBar。

    【讨论】:

    • 嗨,Charles,我已从 Storyboard 中删除了搜索栏并添加了建议的行,但没有成功。
    【解决方案4】:

    如果向下滚动时看到后面的栏,应该是约束问题。尝试删除手动约束(不是“清除约束”)。

    【讨论】:

    • Achron,对于Search Bar and Search Display Controller,没有可创建的约束。搜索栏会自动添加到表格视图的顶部。
    • 问题是没有搜索栏的约束,但可以是视图的。我看到你在视图和内容视图中有它们。例如,我想象您为 5S 创建了视图,但对于 4S 也存在相同的限制。也许,他们应该是个问题。
    猜你喜欢
    • 2016-06-12
    • 2012-07-22
    • 2021-01-25
    • 2017-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-22
    • 2011-02-08
    相关资源
    最近更新 更多