ซ่อนแถบแท็บในแอป IOS swift


92

ฉันกำลังพยายามหาวิธีซ่อนแถบแท็บในแอพที่รวดเร็วของ iOS ฉันไม่สนใจเกี่ยวกับแอนิเมชั่นแฟนซีหรืออะไรเลย ฉันสามารถใส่บางอย่างในฟังก์ชัน ViewDidLoad () ได้


ตั้งค่านี้ก่อนที่จะผลักดัน VC vc.hidesBottomBarWhenPushed = trueควรทำงาน อย่าแสดงและซ่อนแถบแท็บด้วยตนเอง
abhimuralidharan

คำตอบ:


218

คุณสามารถใช้สิ่งนี้ในViewDidLoad()วิธีการของคุณ

self.tabBarController?.tabBar.hidden = true

สำหรับ Swift 3.0, 4.0, 5.0 :

self.tabBarController?.tabBar.isHidden = true

หรือคุณสามารถเปลี่ยนตำแหน่ง z ของแถบแท็บด้วยวิธีนี้:

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

และหากคุณต้องการแสดงอีกครั้ง:

self.tabBarController?.tabBar.layer.zPosition = 0

16
Dharmesh ขอบคุณสำหรับการตอบกลับ สิ่งนี้จะซ่อนแถบแท็บสำเร็จ แต่มุมมองตารางไม่เต็มหน้าจอ มันเป็นเพียงสีดำที่แถบแท็บควรอยู่ ฉันเดาว่ามีขั้นตอนอื่นที่จะทำให้พอดีกับหน้าจอ?
Robert

3
เพิ่มข้อ จำกัด สำหรับสิ่งนั้น
Dharmesh Kheni

2
อะไรคือ "ข้อ จำกัด " ที่จะเพิ่ม?
db0

หากคุณใช้ข้อ จำกัด คุณสามารถเปลี่ยนข้อจำกัดความสูงสำหรับสิ่งนั้นหรือคุณสามารถเปลี่ยนกรอบของ tableView @ db0
Dharmesh Kheni

5
แต่แถบแท็บจะยังคงสัมผัสอยู่ให้ลองแตะใกล้แท็บแถบใด ๆ ที่มองไม่เห็น @DharmeshKheni
Shobhit C

143

คำตอบที่ยอมรับใช้งานได้ แต่การเปลี่ยนไปใช้มุมมองอื่นมีภาพเคลื่อนไหวที่กระตุก (ภาพเคลื่อนไหวแถบแท็บ)

ต้องการเพิ่มแม้ว่าโซลูชันของ Kalpesh จะทำงานได้อย่างสมบูรณ์แบบสำหรับฉัน แต่ฉันพบว่าตัวควบคุมมุมมองทุกตัวมีแอตทริบิวต์สำหรับ hidesBottomBarWhenPushed (ดูสตอรี่บอร์ด) หากคุณต้องการซ่อนแถบแท็บคุณควรทำเครื่องหมายที่ และมันจะทำงานได้ดี

ป้อนคำอธิบายภาพที่นี่

อัปเดต: ฉันไม่แน่ใจว่านี่เป็นสิ่งที่ทราบหรือไม่ แต่นี่คือสิ่งที่หน้าเอกสารของ Apple ระบุว่า:

ตัวควบคุมมุมมองที่เพิ่มเป็นลูกของตัวควบคุมการนำทางสามารถแสดงแถบเครื่องมือเสริมที่ด้านล่างของหน้าจอ ค่าของคุณสมบัตินี้บนตัวควบคุมมุมมองด้านบนสุดกำหนดว่าจะมองเห็นแถบเครื่องมือหรือไม่ หากค่าของคุณสมบัตินี้เป็นจริงแถบเครื่องมือจะซ่อนอยู่ หากค่าของคุณสมบัตินี้เป็นเท็จแถบจะมองเห็นได้

ฉันคิดว่านี่หมายความว่าคุณต้องตั้งค่าพื้นฐานของ hidesBottomBarWhenPushed ที่ตัวควบคุมมุมมองด้านบนสุด (ตัวแรกบนสแต็กการนำทาง) เมื่อคุณตั้งค่าเป็นจริงคุณสามารถเปลี่ยนเป็นเท็จหรือจริงสำหรับตัวควบคุมมุมมองอื่นบน ซ้อนกัน. แต่ถ้าค่า hidesBottomBarWhenPushed ของคอนโทรลเลอร์มุมมองบนสุดของคุณเป็นเท็จจะไม่แสดงแถบแท็บสำหรับคอนโทรลเลอร์อื่น ๆ บนสแต็กการนำทาง


2
นั่นคือสิ่งที่เราควรทำ ดีกว่าคำตอบอื่น ๆ มากหากคุณต้องการซ่อนไว้ในขณะที่คุณนำเสนอ ViewController
Gabriel Goncalves

เหตุใดจึงใช้ไม่ได้ใน Swift 4 ?? ฉันทำเครื่องหมายที่ตัวเลือกแล้ว แต่ยังคงปรากฏเมื่อฉันไปที่ตัวควบคุมมุมมองนั้น
ken

นอกจากนี้ยังซ่อนแถบแท็บสำหรับตัวควบคุมมุมมองที่เพิ่มลงในสแต็กหลังจากนี้ มีวิธีที่จะนำมันกลับมาสำหรับตัวควบคุมมุมมองที่ตามมาหรือไม่?
Justin Vallely

@JustinVallely โปรดแจ้งให้เราทราบหากการอัปเดตทำงานได้ในคำตอบ
Akshansh Thakur

1
ขอบคุณคำตอบที่ได้รับการยอมรับมีปัญหาสำหรับฉันเมื่อฉันกลับไปที่มุมมองที่ฉันมาจากนั้น Tabbar ก็หายไปเช่นกัน!
Abed Naseri

81

ก่อนที่จะผลักดันชุด controller.hidesBottomBarWhenPushed = true

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

ใช้งานไม่ได้เมื่อเพิ่มชุดควบคุมด้วยsetViewControllers
KR

27

ไม่จำเป็นต้องตั้งค่าคุณสมบัติ isHidden ของ tabBar

เพียงไปที่ ViewController (ใน StoryBoard) -> ตัวตรวจสอบคุณสมบัติ -> ในส่วน 'View Controller' ให้เลือกช่องทำเครื่องหมาย 'Hide Bottom Bar on Push' การทำงานนี้เหมือนมีเสน่ห์

หากคุณไปทาง 'isHidden' คุณจะต้องจัดการหลายอย่างเช่นทำให้ปรากฏขึ้นอีกครั้งเมื่อคุณย้อนกลับและลบพื้นที่ว่างด้านล่างออกหลังจากซ่อน tabBar


3
นี่น่าจะเป็นคำตอบที่แท้จริง สิ่งนี้ทำให้ฉันตั้งค่าข้อ จำกัด สำหรับองค์ประกอบ UI ได้โดยไม่ต้องยุ่งยาก
Karthik Kannan

2
Hide Bottom Bar on Pushมีภาพเคลื่อนไหวที่ไม่พึงประสงค์ imo
Teodor Ciuraru

เมื่อคุณกลับจากหน้านี้ Tabbar จะหยุดการทำงานเล็กน้อยและกลับมา คุณคิดว่าเหตุผลคืออะไร?
Yunus T.


3

คุณยังสามารถตั้งค่าเป็นส่วนขยาย (ใช้คำตอบ 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
    }
}

3

นี่เป็นวิธีทางโปรแกรมสำหรับ Swift 4.0, 4.1, 4.2, 5.0 และใหม่กว่า >:

tabBarController?.hidesBottomBarWhenPushed = true

หรือ

hidesBottomBarWhenPushed = true

@NicoS. จริง. ในคำถาม / คำตอบคุณอ่านอะไรเกี่ยวกับแถบเครื่องมือที่ไหน
J. Doe

จากเอกสารประกอบ: ค่าบูลีนที่ระบุว่าแถบเครื่องมือที่ด้านล่างของหน้าจอซ่อนอยู่หรือไม่เมื่อตัวควบคุมมุมมองถูกผลักไปยังตัวควบคุมการนำทาง
Nico S.

1
คำถามเกี่ยวกับ TabBar ไม่ใช่ ToolBar
Nico S.

1
อันแรกใช้งานไม่ได้ควรเพิ่มอันที่สองเมื่อดำเนินการต่อหรือก่อนที่จะดันตัวควบคุมมุมมอง
Gal Shahar

1
ขอบคุณสำหรับ: destinationVC.hidesBottomBarWhenPushed = true สำหรับตัวเลือกอื่น ๆ แถบด้านล่างหายไป แต่มีหลุมดำขนาดใหญ่อยู่ที่นั่น
Guilherme

1

ในการซ่อน navigationBar และ tabBar ฉันใช้ฟังก์ชันถัดไป:

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

    }

}

เมื่อการวางแนวหน้าจอเปลี่ยนความสูงของแถบแถบก็เปลี่ยนไปด้วยดังนั้นฉันจึงใช้ฟังก์ชันถัดไปเพื่อออกจากการแสดงเต็มหน้าจอเพื่อปรับขนาดความสูง:

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

ฉันหวังว่ามันจะเป็นประโยชน์สำหรับคุณ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.