Ukryj pasek kart w szybkiej aplikacji IOS

91

Próbuję dowiedzieć się, jak ukryć pasek kart w mojej szybkiej aplikacji na iOS. Nie obchodzą mnie żadne wymyślne animacje ani nic. Po prostu coś, co mogę umieścić w funkcji ViewDidLoad ().

Robert
źródło
Ustaw to przed wciśnięciem VC. vc.hidesBottomBarWhenPushed = truepowinien wykonać pracę. NIE WOLNO ręcznie pokazywać i ukrywać paska kart.
abhimuralidharan

Odpowiedzi:

213

Możesz po prostu użyć tego w swojej ViewDidLoad()metodzie.

self.tabBarController?.tabBar.hidden = true

Dla Swift 3.0, 4.0, 5.0 :

self.tabBarController?.tabBar.isHidden = true

Lub możesz zmienić pozycję z paska kart w ten sposób:

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

a jeśli chcesz to ponownie pokazać, to:

self.tabBarController?.tabBar.layer.zPosition = 0
Dharmesh Kheni
źródło
14
Dharmesh, dzięki za odpowiedź. To pomyślnie ukrywa pasek kart, ale wtedy widok tabeli nie wypełnia ekranu. Tam, gdzie powinien znajdować się pasek kart, jest po prostu czarny. Myślę, że jest jeszcze jeden krok, aby dopasować go do ekranu?
Robert
3
Dodaj do tego ograniczenia.
Dharmesh Kheni
2
Jakie „ograniczenia” należy dodać?
db0
Jeśli użyłeś ograniczeń, możesz zmienić ograniczenie wysokości lub zmienić ramkę tableView. @ db0
Dharmesh Kheni
5
Ale pasek kart nadal byłby w dotyku, spróbuj stuknąć w pobliżu dowolnej karty niewidocznego paska kart. @DharmeshKheni
Shobhit C
140

Zaakceptowana odpowiedź działa, ale przejście do innego widoku ma niestabilną animację (animacja paska zakładek)

Chciałem też dodać, chociaż rozwiązanie Kalpesha działało idealnie dla mnie, dowiedziałem się, że każdy kontroler widoku ma atrybut dla hidesBottomBarWhenPushed (sprawdź scenorys). Jeśli chcesz ukryć pasek zakładek, powinieneś zaznaczyć to. I to by działało świetnie.

wprowadź opis obrazu tutaj

Aktualizacja: Nie jestem pewien, czy jest to znana rzecz, ale oto, co mówi strona dokumentacji Apple:

Kontroler widoku dodany jako element podrzędny kontrolera nawigacji może wyświetlać opcjonalny pasek narzędzi u dołu ekranu. Wartość tej właściwości na najwyższym kontrolerze widoku określa, czy pasek narzędzi jest widoczny. Jeśli wartość tej właściwości jest true, pasek narzędzi jest ukryty. Jeśli wartość tej właściwości jest false, pasek jest widoczny.

Myślę, że oznacza to, że musisz ustawić podstawową wartość hidesBottomBarWhenPushed na najwyższym kontrolerze widoku (pierwszym na stosie nawigacyjnym). Po ustawieniu tego na true możesz zmienić na false lub true dla innych kontrolerów widoku w stos. Jeśli jednak najwyższy kontroler widoku hidesBottomBarWhenPushed ma wartość false, nie wyświetli paska kart dla innych kontrolerów na stosie nawigacji.

Akshansh Thakur
źródło
2
to właśnie powinniśmy zrobić. O wiele lepiej niż inne odpowiedzi, jeśli chcesz to ukryć, prezentując ViewController
Gabriel Goncalves
dlaczego to nie działa w Swift 4? Zaznaczam już opcję, ale nadal pojawia się, kiedy przechodzę do tego konkretnego kontrolera widoku
ken
Spowoduje to również ukrycie paska kart dla wszystkich kontrolerów widoku, które zostaną dodane do stosu po tym. Czy istnieje sposób na przywrócenie go dla tych kolejnych kontrolerów widoku?
Justin Vallely,
@JustinVallely Daj mi znać, jeśli aktualizacja działa w odpowiedzi
Akshansh Thakur
1
Dzięki, zaakceptowana odpowiedź miała dla mnie problem, kiedy wróciłem do widoku, z którego wracałem, Tabbar również zniknął!
Abed Naseri
79

Przed naciśnięciem ustaw kontroler.hidesBottomBarWhenPushed = true

let objCreateEventVC = CreateEventVC()
objCreateEventVC.hidesBottomBarWhenPushed = true
self.navigationController?.pushViewController(objCreateEventVC, animated: false)
kalpesh jetani
źródło
Nie działa podczas dodawania kilku kontrolerów zsetViewControllers
KR
27

Nie ma potrzeby ustawiania właściwości isHidden tabBar.

Po prostu przejdź do ViewController (w StoryBoard) -> Inspektor atrybutów -> W sekcji „Wyświetl kontroler” zaznacz pole wyboru „Ukryj dolny pasek po naciśnięciu”. To działa jak urok.

Jeśli wybierzesz sposób „isHidden”, musisz wykonać wiele czynności, tj. Sprawić, by pojawił się ponownie po powrocie, a także usunąć dolne puste miejsce po ukryciu tabBar.

Tejas
źródło
3
To powinna być właściwa odpowiedź. Umożliwiło mi to bezproblemowe ustawienie ograniczeń dla elementów interfejsu użytkownika.
Karthik Kannan
2
Hide Bottom Bar on Pushma nieprzyjemną animację, imo.
Teodor Ciuraru
Kiedy wrócisz z tej strony, Tabbar trochę zawiesza się i wraca. Jak myślisz, jaki jest tego powód?
Yunus T.
3

Szybki 3.

self.tabBarController?.tabBar.isHidden = true
Ronny Kibet
źródło
3

Możesz także ustawić rozszerzenie (użyj odpowiedzi 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
źródło
2

Oto sposób programistyczny dla Swift 4.0, 4.1, 4.2, 5.0 i nowszych >:

tabBarController?.hidesBottomBarWhenPushed = true

lub

hidesBottomBarWhenPushed = true
J. Doe
źródło
@NicoS. Prawdziwe. Gdzie w pytaniu / odpowiedzi czytasz cokolwiek o pasku narzędzi?
J. Doe
Z dokumentacji: Wartość logiczna wskazująca, czy pasek narzędzi u dołu ekranu jest ukryty, gdy kontroler widoku zostanie umieszczony na kontrolerze nawigacji.
Nico S.,
1
Pytanie dotyczy TabBar, a nie ToolBar
Nico S.
@NicoS. tak samo jest w tej sytuacji ... lol. Najwyraźniej nawet nie zadałeś sobie trudu, aby go wypróbować.
J. Doe
1
pierwsza nie działa, drugą należy dodać przy wykonywaniu płynności lub przed naciśnięciem kontrolera widoku.
Gal Shahar
1

Aby ukryć navigationBar i tabBar, używam następnej funkcji:

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

    }

}

Kiedy orientacja ekranu zmieniła się, wysokość tabBar również się zmienia, więc używam następnej funkcji, aby wyjść z trybu pełnoekranowego, aby zmienić wysokość:

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
    }
}

Mam nadzieję, że ci się przyda.

Alberto
źródło