【问题标题】:UIView on top of navigation item导航项顶部的 UIView
【发布时间】:2012-11-21 13:02:51
【问题描述】:

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

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

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

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

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

编辑

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

【问题讨论】:

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

标签: iphone objective-c uiview storyboard


【解决方案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 提供正确的字体大小和阴影,它看起来与系统的默认标题没有区别,你也可以在它上面有透明的视图。

【讨论】:

  • 是的,我能够从这篇文章中获得默认字体/大小设置:stackoverflow.com/questions/599405/…
  • 我还有一个问题。我需要一个进度条,进度条的标签和导航控制器的标题都在一个拥挤的小区域中。在一个视图中包含三个 UI 元素真的有意义吗?它只是在界面构建器中变得如此拥挤。
  • 在一个视图中包含三个 UI 元素从根本上来说并没有错。你是对的,你需要小心如何布置它,这样它对用户来说仍然看起来不错。
  • 好吧,他们永远不会同时出现。我只是在隐藏调用上做一些切换,以便模拟您使用消息时发生的效果。这意味着您通常会在顶部看到联系人的姓名,但是当您发送消息时,它会切换到显示“正在上传”的标签,然后是进度条。发送消息后,它会恢复为联系人的姓名。因此,这个小区域的房地产是相互排斥的。然而,问题是在界面构建器中处理,因为您可以一次看到它。尽管如此,我会处理它。谢谢!
【解决方案2】:

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

【讨论】:

  • 所以你是说我必须在视图本身上添加一个与原始标题相同的文本大小/字体的标签?有没有办法让底层标题通过透明的覆盖视图暴露出来?
  • 是的,你必须添加你自己的视图——它可能只是标签本身,或者 UIView 的任何其他子类。查看 titleView 属性的引用,它说明如果设置一个,它将代替标准标题。
猜你喜欢
  • 1970-01-01
  • 2018-09-10
  • 1970-01-01
  • 1970-01-01
  • 2015-03-24
  • 1970-01-01
  • 2020-09-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多