iOS – UISearchController – definesPresentationContext布局问题

我有一个带有导航栏HIDDEN的UIViewController,顶部的几个按钮,以及带有UISearchController作为标题的UITableView.

这是问题:当我创建UISearchController时,我也有这一行:

    self.definesPresentationContext = YES;

现在发生的事情是,当我使用UISearchController进行搜索,并单击UITableView中的一个结果时,它会打开我的下一个UIViewController(这正是它应该做的 – 而且下面的UIViewController也隐藏了导航栏)正确但它在UIViewController顶部显示一个灰色的导航栏,即使我将导航栏设置为隐藏.

现在,当我设置:

    self.definesPresentationContext = NO;

导航栏不会出现在下面的视图中,而是在其中,UISearchController的SearchBar出现在下面的UIViewController中,与主视图控制器中的位置相同,即使它显然不再存在.

它应该是这样的(UIViewController的顶部):
《iOS – UISearchController – definesPresentationContext布局问题》

当self.definesPresentationContext = YES时会发生这种情况.

《iOS – UISearchController – definesPresentationContext布局问题》

这就是`self.definesPresentationContext = NO;

《iOS – UISearchController – definesPresentationContext布局问题》

我怎样才能回到第一的情况?
UPDATE
这是一个重复此问题的示例项目:
http://www.filedropper.com/sampleprojectbugreport

最佳答案 它确实看起来像iOS中的一个错误.如果您不打算完全显示导航栏,则可以继承UINavigationController并覆盖-setNavigationBarHidden:animated:方法并对隐藏值进行硬编码:

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

我已经测试了这种解决方法,它会阻止导航栏显示.

请参阅更新的示例项目:http://appsandwich.com/stackoverflow/navcontrollersubclass.zip

点赞