0

Für den Zweck dieser Frage zeige ich eine abgespeckte Version meiner Ansichtshierarchie. Meine App enthält eine UITabBarController als Basis. Der oberste View-Controller der einzelnen Registerkarten ist ein Navigationscontroller und in jedem von ihnen sind View-Controller eingebettet.Die Registerkarte wird nicht ausgeblendet, wenn sie in einen ViewController in einem UITabBarController geschoben wird

enter image description here

Lassen Sie uns die ersten Reiter nehmen.

UITabBarController -> UINavigationController -> UITableViewController -> UIViewController

Lassen Sie uns sagen, dass die UITableViewController Beispiel eine Art von einer Liste und die UIViewController ist die Detailansicht. Wenn der Benutzer auf ein Element in der Liste klickt, gelangen Sie zur Detailansicht. Und wenn das passiert, habe ich die UIViewControllerhidesBottomBarWhenPushed Eigenschaft auf true so eingestellt, dass die Registerkarte am unteren Rand ausblenden würde, wenn der Benutzer in der Detailansicht ist.

enter image description hereenter image description here

erhält Meine App Push-Benachrichtigungen. Wenn auf sie geklopft wird, sollte es direkt in die Detailansicht öffnen. Ich kann es dorthin bringen. Aber das Problem ist die Tableiste unten ist immer noch sichtbar!

enter image description here

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { 

    let storyboard = UIStoryboard(name: "Main", bundle: Bundle.main) 
    window = UIWindow(frame: UIScreen.main.bounds) 

    let tabBarController = storyboard.instantiateViewController(withIdentifier: "TabBarController") as! TabBarController 

    if openingFromPush { 
     let firstNavigationController = storyboard.instantiateViewController(withIdentifier: "FirstNavigationController") as! UINavigationController 
     let tableViewController = storyboard.instantiateViewController(withIdentifier: "TableViewController") as! TableViewController 
     let viewController = storyboard.instantiateViewController(withIdentifier: "ViewController") as! ViewController 
     viewController.hidesBottomBarWhenPushed = true 
     firstNavigationController.viewControllers = [tableViewController, viewController] 

     tabBarController.viewControllers?[0] = firstNavigationController 
     // tabBarController.tabBar.isHidden = true 
     window?.rootViewController = tabBarController 
    } else { 
     window?.rootViewController = tabBarController 
    } 

    window?.makeKeyAndVisible() 
    return true 
} 

stellte ich die gleiche hidesBottomBarWhenPushed Eigenschaft true in dem, wenn ich den View-Controller instanziiert, aber das scheint keine Wirkung zu haben. Ich habe sogar gerade versucht, die Tabbar so zu verstecken tabBarController.tabBar.isHidden = true, aber das tut auch gar nichts.

Ich kann nicht herausfinden, wie man das löst. Jede Hilfe wäre willkommen.

Ich fügte ein Beispiel Xcode-Projekt here als auch wenn das hilft.

Antwort

3

können Sie diesen Code verwenden für Detailansicht Controller drücken:

if openingFromPush { 
      let viewController = storyboard.instantiateViewController(withIdentifier: "ViewController") as! ViewController 
      viewController.hidesBottomBarWhenPushed = true 
      if let nvc = tabBarController.viewControllers?[0] as? UINavigationController { 
       nvc.pushViewController(viewController, animated: false) 
      } 

      window?.rootViewController = tabBarController 
     } 

Sie brauchen keine Navigation View-Controller und Tisch-View-Controller erneut seine bereits in Tab-Leiste Controller

+0

Danke an init! Das hat funktioniert. – Isuru

+0

Wie der Name schon sagt, musste der View-Controller * innerhalb des Navigations-Controllers * gedrückt * werden –

Verwandte Themen