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 上有一个UISegmentedControlUIViewController 嵌入在 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 中取出UISegmentedControlUINavigationBar 标题看起来很好。

如何从导航栏中隐藏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 隐藏导航栏中的后退按钮

iOS:在导航栏中显示搜索栏时隐藏范围栏

如何在导航栏中舍入当前选项卡上方和下方的选项卡,除了当前选项卡之外,还隐藏导航栏

用户登录并重定向到主页后,如何在主页导航栏中隐藏登录链接并显示注销链接?