【问题标题】:Navigation bar now showing using Coordinator navigation导航栏现在使用协调器导航显示
【发布时间】:2020-03-13 09:57:49
【问题描述】:

要从UIViewController 中分离屏幕导航逻辑,请遵循本教程: https://www.hackingwithswift.com/articles/71/how-to-use-the-coordinator-pattern-in-ios-apps

使用Coordinator protocol 设置正确,但导航栏未显示。

Coordinator.swift

protocol Coordinator {
    var childCoordinator: [Coordinator] {get set}
    var navigationController: UINavigationController {get set}

    func start()
}

MainCoordinator.swift

class MainCoordinator: Coordinator {
    var childCoordinator = [Coordinator]()

    var navigationController: UINavigationController

    init(navigationController: UINavigationController) {
        self.navigationController = navigationController
    }
    func start() {
        let vc = ViewController.instantiate()
        navigationController.pushViewController(vc, animated: false)
        navigationController.title = "Home"
        navigationController.navigationBar.prefersLargeTitles = true

    }
}

完整的源代码可以在 GitHub 上找到: https://github.com/harshal-wani/CoordinatorNavigation

如何解决?

谢谢

【问题讨论】:

  • 我们需要修改SceneDelegate吗?

标签: ios swift uinavigationcontroller uinavigationbar


【解决方案1】:

您将title 设置为navigationController 而不是ViewController,因此您无法在存在的navigationBar 上看到title。设置title为,

func start() {
    let vc = ViewController.instantiate()
    vc.title = "Home"
    navigationController.pushViewController(vc, animated: false)
    navigationController.navigationBar.prefersLargeTitles = true  // 4

}

【讨论】:

  • 那么您可能会遇到另一个问题,即没有使用上述代码创建 viewController。
  • 通过从 AppDelegate 中删除 SceneDelegate 委托方法并从 info.plist 中删除密钥,它可以工作
  • 是的,除了修复你需要像上面那样改变。
【解决方案2】:

您也可以按如下方式修改场景委托:

var window: UIWindow?
var coordinator: MainCoordinator?

func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {

    let navController = UINavigationController()
    coordinator = MainCoordinator(navigationController: navController)
    coordinator?.start()

    if let windowScene = scene as? UIWindowScene {
        let window = UIWindow(windowScene: windowScene)
        window.rootViewController = navController
        self.window = window
        window.makeKeyAndVisible()
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多