Registerkartenleiste in der IOS Swift App ausblenden

88

Ich versuche herauszufinden, wie ich die Registerkartenleiste in meiner schnellen iOS-App ausblenden kann. Ich interessiere mich nicht für ausgefallene Animationen oder irgendetwas. Nur etwas, das ich in die ViewDidLoad () -Funktion einfügen kann.

Robert
quelle
Stellen Sie dies ein, bevor Sie den VC drücken. vc.hidesBottomBarWhenPushed = truesollte die Arbeit machen. Die Registerleiste NICHT manuell ein- und ausblenden.
Abhimuralidharan

Antworten:

204

Sie können dies einfach in Ihrer ViewDidLoad()Methode verwenden.

self.tabBarController?.tabBar.hidden = true

Für Swift 3.0, 4.0, 5.0 :

self.tabBarController?.tabBar.isHidden = true

Oder Sie können die z-Position der Registerkartenleiste folgendermaßen ändern:

self.tabBarController?.tabBar.layer.zPosition = -1

und wenn du es nochmal zeigen willst dann:

self.tabBarController?.tabBar.layer.zPosition = 0
Dharmesh Kheni
quelle
12
Dharmesh, danke für die Antwort. Dadurch wird die Registerkartenleiste erfolgreich ausgeblendet, aber die Tabellenansicht füllt den Bildschirm nicht aus. Es ist nur schwarz, wo die Registerkartenleiste sein sollte. Ich denke, es gibt noch einen weiteren Schritt, um es auf den Bildschirm zu bringen?
Robert
3
Fügen Sie dafür Einschränkungen hinzu.
Dharmesh Kheni
2
Was sind die "Einschränkungen" hinzuzufügen?
db0
Wenn Sie Einschränkungen verwendet haben, können Sie die Höhenbeschränkung dafür ändern oder den Frame von tableView ändern. @ db0
Dharmesh Kheni
5
Aber die Registerkartenleiste würde immer noch die Berührung annehmen. Versuchen Sie, in der Nähe einer Registerkarte der unsichtbaren Registerkartenleiste zu tippen. @ DharmeshKheni
Shobhit C
136

Die akzeptierte Antwort funktioniert, aber der Übergang zu einer anderen Ansicht hat eine abgehackte Animation (Die Registerkarte Leistenanimation)

Ich wollte auch hinzufügen, dass Kalpeshs Lösung perfekt für mich funktioniert hat. Ich fand heraus, dass jeder Ansichts-Controller ein Attribut für hidesBottomBarWhenPushed hat (siehe Storyboard). Wenn Sie die Registerkartenleiste ausblenden möchten, sollten Sie dies ankreuzen. Und es würde großartig funktionieren.

Geben Sie hier die Bildbeschreibung ein

Update: Ich bin mir nicht sicher, ob dies bekannt ist, aber auf der Apple-Dokumentationsseite steht Folgendes:

Ein Ansichts-Controller, der als untergeordnetes Element eines Navigations-Controllers hinzugefügt wurde, kann eine optionale Symbolleiste am unteren Bildschirmrand anzeigen. Der Wert dieser Eigenschaft im obersten Ansichts-Controller bestimmt, ob die Symbolleiste sichtbar ist. Wenn der Wert dieser Eigenschaft true ist, wird die Symbolleiste ausgeblendet. Wenn der Wert dieser Eigenschaft false ist, wird der Balken angezeigt.

Ich denke, dies bedeutet, dass Sie den Grundwert von hidesBottomBarWhenPushed am obersten Ansichts-Controller (dem ersten im Navigationsstapel) festlegen müssen. Sobald Sie diesen Wert auf true gesetzt haben, können Sie für die anderen Ansichts-Controller auf dem Befehl auf false oder true ändern Stapel. Wenn der hidesBottomBarWhenPushed-Wert Ihres obersten View-Controllers jedoch false ist, wird keine Registerkartenleiste für andere Controller im Navigationsstapel angezeigt.

Akshansh Thakur
quelle
2
das sollten wir tun. Viel besser als andere Antworten, wenn Sie es nur ausblenden möchten, während Sie den ViewController
Gabriel Goncalves
Warum funktioniert das nicht in Swift 4? Ich habe die Option bereits angekreuzt, aber sie wird immer noch angezeigt, wenn ich zu diesem bestimmten Ansichts-Controller gehe
Ken
Dadurch wird auch die Registerkartenleiste für alle Ansichtscontroller ausgeblendet, die danach zum Stapel hinzugefügt werden. Gibt es eine Möglichkeit, es für diese nachfolgenden Ansichts-Controller zurückzubringen?
Justin Vallely
@ JustinVallely Bitte lassen Sie mich wissen, ob das Update in der Antwort
funktioniert
1
Danke, die akzeptierte Antwort hatte ein Problem für mich, als ich zu der Ansicht zurückkehrte, aus der ich kam, war auch die Tabbar dafür verschwunden!
Abed Naseri
78

Vor dem Drücken von set controller.hidesBottomBarWhenPushed = true

let objCreateEventVC = CreateEventVC()
objCreateEventVC.hidesBottomBarWhenPushed = true
self.navigationController?.pushViewController(objCreateEventVC, animated: false)
Kalpesh Jetani
quelle
26

Die isHidden-Eigenschaft von tabBar muss nicht festgelegt werden.

Gehen Sie einfach zu ViewController (in StoryBoard) -> Attributinspektor -> Aktivieren Sie im Abschnitt "View Controller" das Kontrollkästchen "Bottom Bar on Push ausblenden". Das funktioniert wie ein Zauber.

Wenn Sie den 'isHidden'-Weg gehen, müssen Sie viel Handling machen, dh um ihn beim Zurückgehen wieder erscheinen zu lassen und um den unteren leeren Bereich nach dem Ausblenden der TabBar zu entfernen.

Tejas
quelle
3
Dies sollte die eigentliche Antwort sein. Dadurch konnte ich die Einschränkungen für meine UI-Elemente problemlos festlegen.
Karthik Kannan
2
Hide Bottom Bar on Pushhat eine unangenehme Animation, imo.
Teodor Ciuraru
Wenn Sie von dieser Seite zurückkehren, friert die Tabbar ein wenig ein und kommt zurück. Was denkst du ist der Grund?
Yunus T.
3

Swift 3.

self.tabBarController?.tabBar.isHidden = true
Ronny Kibet
quelle
3

Sie können es auch als Erweiterung festlegen (verwenden Sie die Antwort von Dharmesh Kheni).

extension UITabBar {
func tabsVisiblty(_ isVisiblty: Bool = true){
    if isVisiblty {
        self.isHidden = false
        self.layer.zPosition = 0
    } else {
        self.isHidden = true
        self.layer.zPosition = -1
    }
}
Yair Hadad
quelle
2

Dies ist der programmgesteuerte Weg für Swift 4.0, 4.1, 4.2, 5.0 und höher >:

tabBarController?.hidesBottomBarWhenPushed = true

oder

hidesBottomBarWhenPushed = true
J. Doe
quelle
@NicoS. Wahr. Wo in der Frage / Antwort lesen Sie etwas über eine Symbolleiste?
J. Doe
Aus der Dokumentation: Ein boolescher Wert, der angibt, ob die Symbolleiste am unteren Bildschirmrand ausgeblendet ist, wenn der Ansichtscontroller auf einen Navigationscontroller übertragen wird.
Nico S.
1
Die Frage ist über die TabBar nicht die ToolBar
Nico S.
@NicoS. es ist das gleiche in dieser Situation ... lol. Offensichtlich haben Sie sich nicht einmal die Mühe gemacht, es auszuprobieren.
J. Doe
1
Der erste funktioniert nicht, der zweite sollte hinzugefügt werden, wenn ein Segue durchgeführt wird oder bevor der View Controller gedrückt wird.
Gal Shahar
1

Um die Navigationsleiste und die Registerkartenleiste auszublenden, verwende ich die nächste Funktion:

var tabBarHeight : CGFloat!

func fullScreenAction(){
    if navigationController?.isNavigationBarHidden ?? false {
        //Show navigationBar
        navigationController?.setNavigationBarHidden(false, animated: false)

        //Show tabBar
        tabBarController?.tabBar.isHidden = false
        //Update the height of tabBar
        if (!(tabBarController?.tabBar.frame.size.height.isEqual(to: 0))!) {
            tabBarHeight = self.tabBarController?.tabBar.frame.size.height
        }
        tabBarController?.tabBar.frame.size.height   = tabBarHeight
    } else {
        //Hide navigationBar
        navigationController?.setNavigationBarHidden(true, animated: false)

        //Hide tabBar
        tabBarController?.tabBar.isHidden = true
        //Update the height of tabBar
        tabBarHeight = tabBarController?.tabBar.frame.size.height
        tabBarController?.tabBar.frame.size.height   = 0

    }

}

Wenn sich die Bildschirmausrichtung geändert hat, ändert sich auch die Höhe der Registerkartenleiste. Daher verwende ich die nächste Funktion, um den Vollbildmodus zu verlassen und die Größe zu ändern:

override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {
    super.viewWillTransition(to: size, with: coordinator)
    if navigationController?.isNavigationBarHidden ?? false {
        navigationController?.setNavigationBarHidden(false, animated: false)
        tabBarController?.tabBar.isHidden = false
    }
}

Ich hoffe es ist nützlich für dich.

Alberto
quelle