0

我有一个嵌入在导航控制器中的视图控制器。因此这个视图控制器在顶部有一个导航项。您可以在 ios6 故事板中做的一件事是您可以为此视图控制器设置标题、提示和后退按钮(因为它嵌入在导航控制器中)。

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

我试图通过在界面构建器之外实际设置标题本身来解决问题:

self.navigationItem.title=@"My Title";

但这似乎也不起作用。有没有人知道如何在导航控制器中的 navigationItem 顶部隐藏/显示透明 UIView?

编辑

我放置在导航控制器工具栏中的任何 UI 元素似乎都阻止了底层标题文本的显示。即使元素被标记为透明并且它被设置为隐藏,也会发生这种情况。

4

2 回答 2

1

我的理解是,如果您使用 UIBarButtonItem 类以编程方式执行相同的操作,Interface Builder 或多或少会模仿您会做什么。导航栏中的各种项目是 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 正确的字体大小和阴影,它看起来与系统的默认标题没有区别,你也可以在它上面有透明的视图。

于 2012-12-04T01:18:46.120 回答
0

在 IB 中,您可以将 UIView 拖到导航栏的中心,这将替换默认存在的 titleView(您可以在代码中使用 setTitleView 进行操作:)。如果您使其背景清晰并为其添加标签以保存标题,它将看起来像默认标题。然后,您可以添加另一个 UIView 作为此视图的子视图,就像添加任何其他 UIView 一样。

于 2012-12-04T00:28:28.893 回答