2012-12-03 131 views
0

我有一个视图控制器嵌入在导航控制器。因此,此视图控制器的顶部有一个导航项目。你可以在ios6故事板上做的事情之一是你可以设置这个视图控制器的标题,提示和返回按钮(因为它嵌入在导航控制器中)。UIView导航项目顶部

这就是说,当我指定一个标题和测试应用程序,一切看起来不错。但是,当我将一个透明的UIView放置在导航条目的顶部(例如标题所在的位置)时,标题本身就消失了。我在界面生成器中输入的文本已经消失。我已经证明了这一点,因为如果我删除了我创建的视图,我最初拥有的文本已经消失。

我试图通过实际设置标题本身的界面生成器以外的调解问题:

[email protected]"My Title"; 

但是,好好尝试一下似乎擦出火花。有没有人有一个线索,我可以隐藏/显示导航控制器中的navigationItem顶部的透明UIView?

编辑

我的导航控制器工具栏上放置任何UI元素似乎以防止潜在的标题文本从显示出来。即使元素被标记为透明并且其设置为隐藏,也会发生这种情况。

+0

两个答案都是正确的,但马修提供了更多的细节。 – AbuZubair

回答

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使用正确的字体大小和阴影,它将与系统的默认标题看起来难以区分,并且您还可以在其上方显示透明视图。

+0

是的,我能得到这个职位的默认字体/大小设置:http://stackoverflow.com/questions/599405/iphone-navigation-bar-title-text-color/13694535#13694535 – AbuZubair

+0

我有一个问题虽然。我需要一个进度条,在进度标签和导航控制器标题都在一个挤满小区域。在一个视图中有三个UI元素真的有意义吗?它在界面构建器中变得如此拥挤。 – AbuZubair

+0

没有什么根本上的错误,通过具有在单一视图中有三个UI元素。你是对的,你将需要小心如何布置它,以便它仍然看起来很好的用户。 –

0

在IB中,您可以将UIView拖动到导航栏的中心,这将替换默认情况下存在的titleView(您可以在setTitleView的代码中使用它)。如果您清楚地了解其背景并为其添加标签以保留标题,则它将看起来像默认标题。然后,您可以添加另一个UIView作为此视图的子视图,就像您使用其他UIView一样。

+0

所以你说我必须添加一个标签,其文字大小和字体与原来的标题相同?我没有办法通过透明的覆盖视图让底层标题暴露自己? – AbuZubair

+0

是的,你必须加入自己的观点 - 它可能只是标签本身,或者UIView的任何其他子类。看看为titleview的属性参考,它解释说,如果你设置一个,它采用标准的标题的地方。 – rdelmar