我试图在 UINavigationBar 的 titleView 中放置一个 UISearchBar。
我有两个解决方案,都不方便。
首先是:
[self setSearchController:[[UISearchController alloc] initWithSearchResultsController:searchResultsController]];
[self.searchController setSearchResultsUpdater:searchResultsController];
[self.searchController setHidesNavigationBarDuringPresentation:NO];
[self.searchController.searchBar setSearchBarStyle:UISearchBarStyleMinimal];
[self.searchController setDelegate:self];
[self.searchController setDimsBackgroundDuringPresentation:NO];
[self.searchController.searchBar setDelegate:self];
[self.navigationItem setTitleView:self.searchController.searchBar];
[self setDefinesPresentationContext:YES];
[self.searchController.searchBar setShowsCancelButton:YES];
不搜索时,结果看起来还可以。
但是当搜索开始时,titleView 在右侧扩展太多。事实上,取消按钮是可见的,但只是不在屏幕上......
在这个答案中,我尝试将 UISearchBar 包装在另一个 UIView 中,然后再将其添加到 navigationItem 中。
[self setSearchController:[[UISearchController alloc] initWithSearchResultsController:searchResultsController]];
[self.searchController setSearchResultsUpdater:searchResultsController];
[self.searchController setHidesNavigationBarDuringPresentation:NO];
[self.searchController.searchBar setSearchBarStyle:UISearchBarStyleMinimal];
[self.searchController setDelegate:self];
[self.searchController setDimsBackgroundDuringPresentation:NO];
[self.searchController.searchBar setDelegate:self];
[self.searchController.searchBar setShowsCancelButton:NO];
[self.searchController.searchBar sizeToFit];
UIView *titleViewWrapper = [[UIView alloc] initWithFrame:self.searchController.searchBar.frame];
[titleViewWrapper addSubview:self.searchController.searchBar];
[self.navigationItem setTitleView:titleViewWrapper];
[self setDefinesPresentationContext:YES];
[self.searchController.searchBar setShowsCancelButton:YES];
结果如下:
不搜索:
搜索:
我正在管理在 UISearchController 的委托方法中显示/隐藏自己的左/右栏按钮项目。
这发生在模拟器中,仅在 iPad 上。
有任何想法吗?