2

検索バーを使用する必要がありますが、次のコードを使用します。

self.searchBar = [UISearchBar new];
_searchBar.frame = CGRectMake(0, 0, 200, 44);
_searchBar.searchBarStyle = UISearchBarStyleMinimal;
_searchBar.placeholder = @"Search stores";
_searchBar.delegate = self;

self.searchController = [[UISearchDisplayController alloc] initWithSearchBar:_searchBar contentsController:self];
_searchController.searchResultsDataSource = self;
_searchController.searchResultsDelegate = self;
_searchController.delegate = self;

self.definesPresentationContext = YES;
self.edgesForExtendedLayout = UIRectEdgeNone;

結果はこれです...ハンバーガーメニューボタンを失い、検索バーの幅を変更できません。また、奇妙なギャップがあり、ナビゲーションバーと同じくらい大きいようです。ハンバーガーメニューボタンを元に戻し、奇妙なギャップを修正するにはどうすればよいですか?

ここに画像の説明を入力 ここに画像の説明を入力

4

1 に答える 1

3

次のコードを ViewDidLoad に追加します。iOS 7以降で動作します

 if(SYSTEM_VERSION_GREATER_THAN(@"6.1")) {
       self.edgesForExtendedLayout = UIRectEdgeNone;
  }

編集済み

 - (void)setActive:(BOOL)visible animated:(BOOL)animated
{
    [super setActive:visible animated:animated];

    [self.searchContentsController.navigationController setNavigationBarHidden: NO animated: NO];

    CGRect frame = self.searchResultsTableView.frame;
    frame.origin.y = CGRectGetHeight(self.searchContentsController.navigationController.navigationBar.frame);

    frame.size.height = CGRectGetHeight(frame) - CGRectGetMinY(frame);

    self.searchResultsTableView.frame = frame;

    frame = self.searchBar.frame;
    self.searchBar.frame = frame;

    [self.searchContentsController.view insertSubview:self.searchBar aboveSubview:self.searchResultsTableView];

}

もう一度このソリューションを実装してみてください。

- (void)searchDisplayControllerWillBeginSearch:(UISearchDisplayController *)controller {
    self.navigationController.navigationBar.translucent = YES;
}

- (void)searchDisplayControllerDidEndSearch:(UISearchDisplayController *)controller {
    self.navigationController.navigationBar.translucent = NO;
}

注 : UISearchDisplayController は iOS 8 で廃止されました。Apple ドキュメント

iOS8 で次のコードのサポートを使用する

searchController = [[UISearchController alloc] initWithSearchResultsController:nil];
searchController.searchResultsUpdater = self;
searchController.dimsBackgroundDuringPresentation = NO;
searchController.hidesNavigationBarDuringPresentation = NO;
searchController.searchBar.frame = CGRectMake(self.searchController.searchBar.frame.origin.x, self.searchController.searchBar.frame.origin.y, self.searchController.searchBar.frame.size.width, 44.0);
self.tableView.tableHeaderView = self.searchController.searchBar;

また、サンプルコードはこちらからダウンロードできます。

于 2015-05-28T14:25:07.287 に答える