我有一个嵌入在导航控制器中的视图控制器。因此,此视图控制器顶部有一个导航项。您可以在ios6故事板中执行的一项操作是,您可以为此视图控制器设置标题,提示和后退按钮(因为它嵌入在导航控制器中)。
话虽如此,当我指定标题并测试应用程序时,一切看起来都不错。但是,当我在导航项目的顶部放置一个透明的UIView(例如标题所在的位置)时,标题本身就会消失。我输入界面构建器的文本本身已经消失。我已经证明了这一点,因为如果我删除我创建的视图,我最初的文本就消失了。
我试图通过在界面构建器之外设置标题本身来调解问题:
self.navigationItem.title=@"My Title";
但这似乎也不起作用。有没有人知道如何在导航控制器中的navigationItem上隐藏/显示透明的UIView?
修改
我放置在导航控制器工具栏中的任何UI元素似乎都会阻止显示基础标题文本。即使元素被标记为透明并且其设置为隐藏,也会发生这种情况。
答案 0 :(得分:1)
我的理解是,Interface Builder或多或少地模仿了如果使用UIBarButtonItem类以编程方式执行相同操作,您将会做什么。导航栏中的各个项目是UIBarButtonItem类的实例。该类具有以下初始值设定项:
– initWithBarButtonSystemItem:target:action:
– initWithCustomView:
– initWithImage:style:target:action:
– initWithTitle:style:target:action:
– initWithImage:landscapeImagePhone:style:target:action:
当您拥有导航控制器的标题时,Interface Builder会将其视为使用initWithTitle:
初始化程序。基本上,这意味着,在引擎盖下,使用给定标题创建UILabel类,并将UILabel用作UIBarButtonItem的视图。
然而,当您在标题上拖动透明视图时,Interface Builder相当于调用initWithCustomView:
。这意味着您提供的视图将用作UIBarButtonItem的视图。换句话说,当您在标题上拖动自定义视图时,您不会将放在标题之上。您正在使用透明视图替换标题。
一个选项可能是创建一个同时具有UILabel和透明视图作为子视图的视图。然后将该视图作为导航栏的标题。如果你给UILabel正确的字体大小和阴影,它看起来与系统的默认标题没什么区别,你也可以在它上面有透明视图。
答案 1 :(得分:0)
在IB中,您可以将UIView拖动到导航栏的中心,这将替换默认情况下的titleView(您可以使用setTitleView :)在代码中执行此操作。如果清除背景并为其添加标签以保存标题,它将看起来像默认标题。然后,您可以添加另一个UIView作为此视图的子视图,就像您使用任何其他UIView一样。