如何防止 UISearchController 显示导航栏?
How to prevent the UISearchController from showing the navigation bar?
我的用例有点奇怪。我正在使用自己的导航栏,所以我用
隐藏了默认导航栏
[self.navigationController setNavigationBarHidden:YES animated:NO];
在 viewWillAppear
。
一切正常,但如果我在主动搜索时打开键盘,然后返回到上一个 UIViewController
,则本机导航栏会再次出现,最后我得到 2导航栏(我自己的和默认的)。
这就是我在 viewDidLoad
中设置 UISearchController
的方式:
- (void)viewDidLoad {
[super viewDidLoad];
self.searchController = [[UISearchController alloc] initWithSearchResultsController:nil];
self.searchController.searchResultsUpdater = self;
self.searchController.obscuresBackgroundDuringPresentation = NO;
self.searchController.searchBar.delegate = self;
[self.searchController.searchBar sizeToFit];
self.definesPresentationContext = YES;
self.searchController.hidesNavigationBarDuringPresentation = YES;
self.searchController.searchBar.searchBarStyle = UISearchBarStyleMinimal;
}
我已经尝试删除 self.definesPresentationContext = YES;
(或将其设为 NO),但这会产生一个不同的问题,即当我返回到之前的 UIViewController
时,搜索栏保持打开状态最重要的是!直到我点击取消。我还尝试在 viewWillDissappear
上以编程方式调用取消按钮,但这也不起作用...
所以我 运行 别无选择,这就是我来这里的原因。
有什么想法吗?
使用非标准的导航栏可能不是最好的主意。 (我知道客户有时会很固执,但我们应该告诉他们,有时标准解决方案有很多优点,例如维护成本低,从而降低了他们的账单)。
话虽如此,作为最后的手段,我可能会建议您采用一种非常 "strong" 的方法。
您可以使用自定义 class 子 class UINavigationController,并且在此 class 中您可以像这样覆盖 setNavigationBarHidden 方法
- (void)setNavigationBarHidden:(BOOL)hidden animated:(BOOL)animated{
[super setNavigationBarHidden:YES animated:NO];
}
方法。这应该使栏一直隐藏。
不过,我不太支持这种解决方案,但它可能适用于您的情况。
我的用例有点奇怪。我正在使用自己的导航栏,所以我用
隐藏了默认导航栏[self.navigationController setNavigationBarHidden:YES animated:NO];
在 viewWillAppear
。
一切正常,但如果我在主动搜索时打开键盘,然后返回到上一个 UIViewController
,则本机导航栏会再次出现,最后我得到 2导航栏(我自己的和默认的)。
这就是我在 viewDidLoad
中设置 UISearchController
的方式:
- (void)viewDidLoad {
[super viewDidLoad];
self.searchController = [[UISearchController alloc] initWithSearchResultsController:nil];
self.searchController.searchResultsUpdater = self;
self.searchController.obscuresBackgroundDuringPresentation = NO;
self.searchController.searchBar.delegate = self;
[self.searchController.searchBar sizeToFit];
self.definesPresentationContext = YES;
self.searchController.hidesNavigationBarDuringPresentation = YES;
self.searchController.searchBar.searchBarStyle = UISearchBarStyleMinimal;
}
我已经尝试删除 self.definesPresentationContext = YES;
(或将其设为 NO),但这会产生一个不同的问题,即当我返回到之前的 UIViewController
时,搜索栏保持打开状态最重要的是!直到我点击取消。我还尝试在 viewWillDissappear
上以编程方式调用取消按钮,但这也不起作用...
所以我 运行 别无选择,这就是我来这里的原因。
有什么想法吗?
使用非标准的导航栏可能不是最好的主意。 (我知道客户有时会很固执,但我们应该告诉他们,有时标准解决方案有很多优点,例如维护成本低,从而降低了他们的账单)。
话虽如此,作为最后的手段,我可能会建议您采用一种非常 "strong" 的方法。 您可以使用自定义 class 子 class UINavigationController,并且在此 class 中您可以像这样覆盖 setNavigationBarHidden 方法
- (void)setNavigationBarHidden:(BOOL)hidden animated:(BOOL)animated{
[super setNavigationBarHidden:YES animated:NO];
}
方法。这应该使栏一直隐藏。 不过,我不太支持这种解决方案,但它可能适用于您的情况。