【问题标题】:setNavigationBarHidden:YES doesn't work with the searchDisplayControllersetNavigationBarHidden:YES 不适用于 searchDisplayController
【发布时间】:2012-01-21 03:59:59
【问题描述】:

我正在使用以下代码在 detailViewController(我的第二个视图)中隐藏我的导航栏, 当我从 MasterViewController(我的第一个视图)点击我的任何对象时,它工作得非常好。

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];  
    [self.navigationController setNavigationBarHidden:YES animated:animated];
}

但是,当我使用 searchDisplayController 过滤 masterViewController 中的表列表时 并点击结果中的任何对象,detailView 中的导航栏不会被隐藏...

如果我使用 searchDisplayController,是否需要做任何额外的工作来隐藏导航栏?

对于 Debug,我在 setNavigationBarHidden:YES 行设置断点,即使 我通过搜索结果转到 detailViewController,应用程序成功了..

【问题讨论】:

  • 如果我把 [self.navigationController setNavigationBarHidden:YES animated:animated];在 viewDidAppear 中,它工作正常......但我希望在第二个视图出现之前将其隐藏:(

标签: iphone xcode uisearchdisplaycontroller


【解决方案1】:

你应该把 [self.navigationController setNavigationBarHidden:YES];在 viewWillLayoutSubviews 函数中。像这样:

- (void) viewWillLayoutSubviews
{
    [super viewWillLayoutSubviews];
    [self.navigationController setNavigationBarHidden:YES];
}

它有效。

【讨论】:

    【解决方案2】:

    你应该试试这个方法:
    在您声明 UISearchController *searchController 的那个控制器中,您应该实现两种方法(仅作为示例):

    - (void)viewWillAppear:(BOOL)animated
    {
        [super viewWillAppear:animated];
        // if you want to hide Navigation Bar when searchController will become active
        _searchController.hidesNavigationBarDuringPresentation = YES;
    }
    
    - (void)viewWillDisappear:(BOOL)animated
    {
        [super viewWillDisappear:animated];
    
        _searchController.hidesNavigationBarDuringPresentation = NO;
    }
    

    上面的代码可能有差异。 hidesNavigationBarDuringPresentation 属性中的要点(iOS 8.0 及更高版本)。尝试使用它,并在推动新控制器之前转向hidesNavigationBarDuringPresentation = NO。经过这些操作,我获利了结:当推送 UIViewController 时,setter setNavigationBarHidden:YES 开始工作

    【讨论】:

      【解决方案3】:

      如果您想隐藏导航栏,请在您的 MainWindow xib 中取消选中导航控制器的“显示导航栏”属性。

      这将隐藏整个项目中的导航栏。如果您想在任何控制器中显示导航栏,请在该控制器的 ViewDidLoad 方法中设置 NavigationBar Hidden = NO。

      【讨论】:

      • 我以编程方式实现了 navigationBar,所以 setNavigationBarHidden 是唯一的选择......当我从搜索结果中使用它时它不起作用:(
      • 为我工作,setNavigationBarHidden 在 IB 没有为我工作。
      【解决方案4】:

      您应该以某种方式破解搜索显示控制器以隐藏其内置的导航栏。

      答案如下:

      https://stackoverflow.com/a/6337037/1348121

      【讨论】:

        【解决方案5】:

        这个

        - (void) viewWillLayoutSubviews
        

        导致布局问题,所以我使用下面的代码。适合我。

        -(void)viewWillAppear:(BOOL)animated{
            [super viewWillAppear:animated];
            [self.navigationController setNavigationBarHidden:NO];
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-04-09
          • 2014-10-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-12-25
          • 1970-01-01
          相关资源
          最近更新 更多