iOS9:在导航栏中隐藏SegmentedControl后,标题不会出现

时间:2015-10-20 00:01:15

标签: ios swift uinavigationcontroller ios9

UISegmentedControl上有一个UINavigationBarUIViewController嵌入在故事板的UINavigationController屏幕截图中,见下文:

enter image description here

如果该设备是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
    }
}

结果(来自模拟器):

enter image description here

我也试过viewWillAppear,但没有用。

如果我从UISegmentedControl中取出StoryboardUINavigationBar标题就可以了。

如何隐藏导航栏中的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()

2 个答案:

答案 0 :(得分:1)

我认为来自UINavigationBar的topitem被更改而不是UILabel到UISegmentedControl你可能会对[UINavigationBar项目]中包含的数据进行NSLog,看看它们是如何排序的,因为它将呈现最顶层的项目。

  

"导航控制器自动创建导航栏,并在适当时推送和弹出导航项目"

https://developer.apple.com/library/prerelease/tvos/documentation/UIKit/Reference/UINavigationBar_Class/index.html#//apple_ref/occ/instp/UINavigationBar/items

答案 1 :(得分:0)

一个旧线程,但以下对我有用:

  1. 设置navigationItem的titleView为nil:self.navigationItem.titleView = nil

  2. 然后将标题设置为想要的标题:self.title = "Desired Title"