【问题标题】:navigation bar disappears when opening view controller via deep link通过深层链接打开视图控制器时导航栏消失
【发布时间】:2018-05-01 13:15:36
【问题描述】:

我使用教程在应用程序委托中实现了一个方法,以从 safari 的 HTML 按钮打开特定的视图控制器。我的应用委托如下所示:

func application(_ app: UIApplication, open URL: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {
    print("url \(url)")
    print("url host :\(url.host!)")
    print("url path :\(url.path)")


    let urlPath : String = (url.path as String?)!
    let urlHost : String = (url.host as String?)!
    let mainStoryboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)

    if(urlHost != "mywebsite.ir")
    {
        print("Host is not correct")
        return false
    }

    if(urlPath == "/index"){


        let innerPage: ViewController = mainStoryboard.instantiateViewController(withIdentifier: "HomeViewController") as! ViewController
        self.window?.rootViewController = innerPage
    }
    self.window?.makeKeyAndVisible()
    return true
}

我的 HTML 按钮参考是:

<a href= "myapp://mywebsite.ir/index">open app</a>

但是当我的应用程序主页打开时,导航栏消失了,用户被卡住并且无法访问菜单按钮或后退按钮(在内部视图控制器的情况下)。

深度链接前后主视图控制器截图:

【问题讨论】:

    标签: ios swift xcode deep-linking


    【解决方案1】:

    请更新您的代码如下..您应该将导航控制器作为窗口根视图控制器..

    func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {
    print("url \(url)")
    print("url host :\(url.host!)")
    print("url path :\(url.path)")
    
    
    let urlPath : String = (url.path as String?)!
    let urlHost : String = (url.host as String?)!
    let mainStoryboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
    
    if(urlHost != "mywebsite.ir")
    {
        print("Host is not correct")
        return false
    }
    
    if(urlPath == "/index"){
    
    
        let innerPage: ViewController = mainStoryboard.instantiateViewController(withIdentifier: "HomeViewController") as! ViewController
    let nav = UINavigationController.init(rootViewController: innerPage)
        self.window?.rootViewController = nav
    }
    self.window?.makeKeyAndVisible()
    return true
    

    【讨论】:

    • 它完成了这项工作,但导航栏颜色看起来很暗。知道为什么吗?
    • 在您的应用程序中是否更改了导航栏的外观并完成了启动方法?如果您有任何更改而不是您必须使用此导航控制器完成的更改。
    • 你说得对。我已经完成了 UIBarButtonItem.appearance().tintColor = UIColor.white 之类的操作,你能告诉我如何恢复它吗?
    • UIBarButtonItem.appearance().tintColor = UIColor.white-->放到func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> 布尔方法。
    【解决方案2】:

    HomeViewController 是初始的 ViewController 吗?如果没有,您可以调用初始视图控制器,它应该是带有导航控制器的视图控制器。

    尝试这样做: mainStoryboard.instantiateInitialViewController()

    如果行为仍然存在,您可以在代码中嵌入 NavigationController

    let viewController = mainStoryboard.instantiateViewController(withIdentifier: "HomeViewController") as! ViewController
    let navigationController = UINavigationController(rootViewController: viewController)
    self.window?.rootViewController = navigationController
    

    你也不需要调用 window.makeKeyAndVisible()

    【讨论】:

    • 我的初始视图控制器是导航控制器本身,我认为我有理由选择它作为初始视图控制器。我应该将家庭控制器设置为初始吗?
    • 不,你可以保持初始状态。你只需要调用mainStoryboard.instantiateInitialViewController() 来加载你的初始视图控制器
    • 这行代码只是将应用程序恢复到原来的位置(不打开初始 vc)。后来的解决方案完成了这项工作,还显示了导航栏。但该栏失去了自定义(字体和颜色)。有什么想法吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-10
    • 1970-01-01
    相关资源
    最近更新 更多