Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/111.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
iOS 14导航栏标题不显示在以编程方式创建的UINavigationController中_Ios_Swift_Uikit_Ios14 - Fatal编程技术网

iOS 14导航栏标题不显示在以编程方式创建的UINavigationController中

iOS 14导航栏标题不显示在以编程方式创建的UINavigationController中,ios,swift,uikit,ios14,Ios,Swift,Uikit,Ios14,iOS 14.2,当我试图用下面的代码片段以编程方式呈现NavigationController时 @objc private func handleClick() { let viewController = MyViewController() self.present(viewController, animated: true, completion: nil) } 新控制器中的条标题将不会被渲染。我遗漏了什么吗 class MyViewController:

iOS 14.2,当我试图用下面的代码片段以编程方式呈现NavigationController时

@objc private func handleClick() {
    let viewController = MyViewController()
    
    self.present(viewController, animated: true, completion: nil)
}
新控制器中的条标题将不会被渲染。我遗漏了什么吗

class MyViewController: UINavigationController {
    override func viewDidLoad() {
        super.viewDidLoad()

        self.title = "TEST" // NOT WORK
        self.navigationItem.title = "Title" // NOT WORK
    }
}
还尝试了下面的代码片段,将常规视图控制器嵌套到UINavigableController中,但标题仍然没有呈现

@objc private func handleHelpClick() {
    let innerVC = MyInnerViewController()
    innerVC.title = "TEST"
    let viewController = UINavigationController(rootViewController: innerVC)
    self.present(viewController, animated: true, completion: nil)
}

文件说:

导航控制器使用与导航堆栈上的视图控制器关联的UINavigationItem类的导航项对象实例动态构建导航栏的内容

因此,根据我的理解,您必须为UIViewController本身设置标题,而不是为UINavigationController设置标题

例如:

结果:


文件说:

导航控制器使用与导航堆栈上的视图控制器关联的UINavigationItem类的导航项对象实例动态构建导航栏的内容

因此,根据我的理解,您必须为UIViewController本身设置标题,而不是为UINavigationController设置标题

例如:

结果:


@芬贝尔在操场上的回答

import UIKit
import PlaygroundSupport

class MyViewController: UINavigationController {
    override func viewDidLoad() {
        super.viewDidLoad()
    }
}

class ViewController: UIViewController {
    
    private lazy var button: UIButton = {
        let btn = UIButton()
        btn.translatesAutoresizingMaskIntoConstraints = false
        btn.setTitle("Display NavVC", for: .normal)
        btn.setTitleColor(.blue, for: .normal)
        btn.addTarget(self, action: #selector(displayNavVC), for: .touchDown)
        return btn
    }()
    
    override func viewDidLoad() {
        super.viewDidLoad()
        configureButton()
    }
    
    private func configureButton() {
        view.addSubview(button)
        NSLayoutConstraint.activate([
            button.centerYAnchor.constraint(equalTo: view.centerYAnchor),
            button.centerXAnchor.constraint(equalTo: view.centerXAnchor)
        ])
    }
    
    @objc
    private func displayNavVC() {
        let vc = UIViewController()
        vc.title = "abc"
        let navigationVC = MyViewController(rootViewController: vc)
        
        self.present(navigationVC, animated: true, completion: nil)
    }
}

// Present the view controller in the Live View window
PlaygroundPage.current.liveView = ViewController()

@芬贝尔在操场上的回答

import UIKit
import PlaygroundSupport

class MyViewController: UINavigationController {
    override func viewDidLoad() {
        super.viewDidLoad()
    }
}

class ViewController: UIViewController {
    
    private lazy var button: UIButton = {
        let btn = UIButton()
        btn.translatesAutoresizingMaskIntoConstraints = false
        btn.setTitle("Display NavVC", for: .normal)
        btn.setTitleColor(.blue, for: .normal)
        btn.addTarget(self, action: #selector(displayNavVC), for: .touchDown)
        return btn
    }()
    
    override func viewDidLoad() {
        super.viewDidLoad()
        configureButton()
    }
    
    private func configureButton() {
        view.addSubview(button)
        NSLayoutConstraint.activate([
            button.centerYAnchor.constraint(equalTo: view.centerYAnchor),
            button.centerXAnchor.constraint(equalTo: view.centerXAnchor)
        ])
    }
    
    @objc
    private func displayNavVC() {
        let vc = UIViewController()
        vc.title = "abc"
        let navigationVC = MyViewController(rootViewController: vc)
        
        self.present(navigationVC, animated: true, completion: nil)
    }
}

// Present the view controller in the Live View window
PlaygroundPage.current.liveView = ViewController()

你能在ViewDidDisplay而不是viewdidload中尝试吗?@madara它的行为相同,而不是呈现标题。你能在ViewDidDisplay而不是viewdidload中尝试吗?@madara它的行为相同,而不是呈现标题。谢谢,我试过了,但它也没有呈现标题。非常感谢你的演示。让我再试试你的例子。试过提供的例子,它在操场上工作。谢谢,我试过了,但它也没有呈现标题。非常感谢你的演示。让我再试试你的例子。试过提供的例子,它在操场上有效。