通过深度 link 打开视图控制器时导航栏消失
navigation bar disappears when opening view controller via deep link
我已经使用教程在应用程序委托中实现了一个方法,以从 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>
但是当我的应用程序主页打开时,导航栏消失了,用户卡住了,无法访问菜单按钮或后退按钮(在内部视图控制器的情况下)。
home view controller 前后截图link:
请更新您的代码如下..您应该将导航控制器作为 window 根视图控制器..
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
HomeViewController是初始的ViewController吗?如果没有,你可以调用初始视图控制器,它应该是带有导航控制器的视图控制器。
尝试这样做:
mainStoryboard.instantiateInitialViewController()
如果该行为仍然存在,您可以在代码中嵌入 NavigationController
let viewController = mainStoryboard.instantiateViewController(withIdentifier: "HomeViewController") as! ViewController
let navigationController = UINavigationController(rootViewController: viewController)
self.window?.rootViewController = navigationController
另外你不需要调用 window.makeKeyAndVisible()
我已经使用教程在应用程序委托中实现了一个方法,以从 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>
但是当我的应用程序主页打开时,导航栏消失了,用户卡住了,无法访问菜单按钮或后退按钮(在内部视图控制器的情况下)。
home view controller 前后截图link:
请更新您的代码如下..您应该将导航控制器作为 window 根视图控制器..
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
HomeViewController是初始的ViewController吗?如果没有,你可以调用初始视图控制器,它应该是带有导航控制器的视图控制器。
尝试这样做:
mainStoryboard.instantiateInitialViewController()
如果该行为仍然存在,您可以在代码中嵌入 NavigationController
let viewController = mainStoryboard.instantiateViewController(withIdentifier: "HomeViewController") as! ViewController
let navigationController = UINavigationController(rootViewController: viewController)
self.window?.rootViewController = navigationController
另外你不需要调用 window.makeKeyAndVisible()