自定义导航控制器适用于 iOS 13,但不适用于 iOS 12

5 initialization uinavigationcontroller ios swift

我创建了一个自定义UINavigationController如下-

class NavigationViewController: UINavigationController {
    override init(rootViewController: UIViewController) {
        super.init(rootViewController: rootViewController)
        setup()
    }
    required init?(coder aDecoder: NSCoder) {
        return nil
    }
    func setup() {
    }
}
Run Code Online (Sandbox Code Playgroud)

我使用上面的导航控制器如下-

let viewController = NavigationViewController(rootViewController: UIViewController())
present(viewController, animated: true)
Run Code Online (Sandbox Code Playgroud)

上面的代码在 iOS 13 中按预期工作,但在 iOS 12 中失败并出现以下错误

致命错误:对类“appName.NavigationViewController”使用未实现的初始化程序“init(nibName:bundle:)”

添加以下初始化程序可以解决问题

override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?) {
    super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil)
}
Run Code Online (Sandbox Code Playgroud)

谁能指出为什么上面的初始化程序在 iOS 13 中不需要,但在 iOS 12 中需要?