我設法解決一個非常類似的問題給你通過編程設置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];
}
增加更多詳情:
- Interface Builder中:的UIViewController(不UITableViewController中)
添加UITableView
與約束:
一個。 
b。 *我的導航欄是定製的高度 - 你的「頂層空間到:頂面佈置指南」可以改變
從添加表視圖中添加代表&數據源網點到的UIViewController
一。不要忘了這樣做編程:
@interface AddUsersViewController : UIViewController <UITableViewDelegate, UITableViewDataSource>
@property (weak, nonatomic) IBOutlet UITableView *tableView;
在你接口擴展:
一個。設置你的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
雖然這個工作對我來說,我已經發現,有可能會造成這個其他可能出現的情況。我的「問題」並不是搜索欄向下移動了20px(或左右),而是移動了。我將其歸因於包含圖像標題和自定義NavBarButtons的自定義UINavigationBar標題。考慮到這一點,這裏有兩種可能的解決方案:
。
原方案:
你的容器視圖的extendedLayoutIncludesOpaqueBars
物業
一個。 故事板:檢查√在故事板中的表視圖「不透明酒吧」下。
b。 以編程方式:yourTableView(s).extendedLayoutIncludesOpaqueBars
= YES;
。
設置scopeButtonTitles
到空數組。 (如下圖)
self.searchController = UISearchController(searchResultsController: nil);
self.searchController.searchResultsUpdater = self;
self.searchController.searchBar.scopeButtonTitles = [];
self.tableView.tableHeaderView = self.searchController.searchBar;
後兩種答案來自THIS問題,可能被證明是太檢查出有益的。
感謝BananaNeil的研究和測試,他發現如果您按照我的建議設置searchController.searchBar.y = 0
,那麼您的搜索欄應該完全位於您期望的位置。 √
我在這個問題'UISearchController'你還記得,如果/您是如何解決的呢? – AnthonyM