iOS9:在导航栏中隐藏 SegmentedControl 后,标题不出现
Posted
技术标签:
【中文标题】iOS9:在导航栏中隐藏 SegmentedControl 后,标题不出现【英文标题】:iOS9: Title doesn't appear after I hide SegmentedControl in the Navigation Bar 【发布时间】:2015-10-20 00:01:14 【问题描述】:我在UINavigationBar
上有一个UISegmentedControl
。 UIViewController
嵌入在 UINavigationController
故事板的屏幕截图中,见下文:
如果设备是iPad
,我想隐藏UISegmentedControl
并改为显示self.title
。
在我的viewDidLoad
中,我有以下代码:
override func viewDidLoad()
if UIDevice.currentDevice().userInterfaceIdiom == .Pad
segmentedControlNavBar.hidden = true
self.title = "Navigation Title"
else
segmentedControlNavBar.hidden = false
navigationItem.prompt = "Navigation Title"
self.title = nil
结果(来自模拟器):
我也试过viewWillAppear
,但没用。
如果我从Storyboard
中取出UISegmentedControl
,UINavigationBar
标题看起来很好。
如何从导航栏中隐藏UISegmentedControl
并显示标题?
编辑
override func viewDidLoad()
super.viewDidLoad()
segmentedControlMain.hidden = true
navigationItem.prompt = nil
title = "Navigation Title"
let items = self.navigationController?.navigationBar.items
print(items?.first?.title)
日志:可选(“导航标题”)
我猜它在那里,我如何让 UINavigationBar 显示它?
这些都不起作用:
self.navigationController?.view.setNeedsDisplay()
self.navigationController?.navigationBar.setNeedsDisplay()
【问题讨论】:
【参考方案1】:我认为 UINavigationBar 中的 topitem 已更改,而不是将 UILabel 更改为 UISegmentedControl 您可以对 [UINavigationBar items] 中包含的数据执行 NSLog 以查看它们的排序方式,因为它将呈现最顶层的项目。
“导航控制器自动创建导航栏,并在适当的时候推送和弹出导航项”
https://developer.apple.com/library/prerelease/tvos/documentation/UIKit/Reference/UINavigationBar_Class/index.html#//apple_ref/occ/instp/UINavigationBar/items
【讨论】:
我认为我们需要更多信息来调试这个东西,但是如果“hidden = true”不起作用,有时调用 setter 方法会起作用(不要问我为什么)[segmentedControlMain setHidden:YES] ;仔细检查 segmentedControlMain 和视图之间的连接,也可以将 segmentedControlMain 的 alpha 设置更改为 0.0 以使其透明 分段控制被隐藏。但是标题没有出现。 那么也许试试这个:self.navigationController.topItem.title = @"Hello World"; 尝试将分段控制导航栏设置为 nil。【参考方案2】:一个旧线程,但以下对我有用:
设置navigationItem的titleView为nil:self.navigationItem.titleView = nil
然后将标题设置为所需的标题:self.title = "Desired Title"
【讨论】:
以上是关于iOS9:在导航栏中隐藏 SegmentedControl 后,标题不出现的主要内容,如果未能解决你的问题,请参考以下文章
有没有办法从 iOS9 的状态栏中隐藏“返回 Safari”?
在 Swift 中使用 hidesBackButton 隐藏导航栏中的后退按钮