1

我试图在 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 上。

有任何想法吗?

4

0 回答 0