在第一个视图控制器和AutoLayout中隐藏UINavigationBarController

时间:2015-04-17 08:57:57

标签: ios autolayout

我有一个设计用于3个屏幕的应用程序

  • A)初始屏幕不显示顶部导航栏
  • B)第二个屏幕应显示顶部导航栏(带有导航后退按钮到A)
  • C)第三个屏幕不显示顶部导航栏(但正常按钮返回B)

我选择将视图控制器嵌入导航栏中。 但是这样做对第一个视图控制器的AutoLayout约束消除了大量的警告 - 因为嵌入的UIViews被固定到顶部栏 - 这真的很烦人。

当然,如果我"隐藏"故事板设计器中的导航栏,我无法再通过B屏幕添加所需的按钮。

另一种选择可能是手动实现我的应用程序的导航属性,但我真的想避免这样做。

对此最佳(最佳实践)解决方案是什么?

2 个答案:

答案 0 :(得分:2)

太简单了...... 您只需在 viewWillAppear ex:

中设置导航控制器的隐藏属性
- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];
    self.navigationController.navigationBarHidden=YES/NO; //as per your requirement
}

答案 1 :(得分:0)

如@SonuPatel回答中所述,您可以将导航栏设置为相对容易隐藏。对于布局:

在控制器A和C中,相对于视图而不是顶部布局指南设置顶部布局偏移。当它不可见时,这将使它们在导航栏下布局。隐藏的项目通常仍然有助于布局,因此topLayout指南不会受到隐藏的影响。

在控制器B中,相对于顶部布局指南制作顶部布局,使其保持在导航栏下方。

对于UITableViewController,您可以通过在属性检查器中选择“在顶栏下方延伸边缘”来免费获取此内容。