【问题标题】:How to prevent the UISearchController from showing the navigation bar?如何防止 UISearchController 显示导航栏?
【发布时间】:2018-07-13 21:59:11
【问题描述】:

我的用例有点奇怪。我正在使用自己的导航栏,所以我用

隐藏了默认导航栏
[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 上以编程方式调用“取消”按钮,但这也不起作用...

所以我的选择已经不多了,这就是我在这里的原因。

有什么想法吗?

【问题讨论】:

  • 如果你使用自己的导航栏,为什么需要默认的?
  • @trungduc 我不知道!这就是整个问题。 UISearchController 将其恢复为默认值...
  • 是否需要使用 searchController 或者为什么不使用 UISearchBar 组件。 ?

标签: ios objective-c uisearchbar uisearchcontroller


【解决方案1】:

使用非标准的导航栏可能不是最好的主意。 (我知道客户有时会很固执,但我们应该告诉他们,有时标准解决方案有很多优点,例如维护成本低,从而降低了他们的费用)。

话虽如此,作为最后的手段,我可​​能会建议您采用一种非常“强大”的方法。 您可以使用自定义类对 UINavigationController 进行子类化,并且在此类中您可以像这样覆盖 setNavigationBarHidden 方法

- (void)setNavigationBarHidden:(BOOL)hidden animated:(BOOL)animated{
     [super setNavigationBarHidden:YES animated:NO];
}

方法。这应该使酒吧一直隐藏。 不过,我不太支持这种解决方案,但它可能适用于你的情况。

【讨论】:

  • 不敢相信我没有想到这一点。完美运行。谢谢!
猜你喜欢
  • 2014-12-05
  • 2019-02-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多