วิธีการซ่อนแถบนำทางจาก ViewController แรกใน Swift


258

ฉันจะซ่อนแถบการนำทางจาก ViewController แรกหรือ ViewController เฉพาะอย่างรวดเร็วได้อย่างไร

ฉันใช้รหัสต่อไปนี้ในviewDidLoad():

override func viewDidLoad() {
    super.viewDidLoad()
    self.navigationController?.isNavigationBarHidden = true
}

และบนviewWillAppear:

override func viewWillAppear(animated: Bool) {
    self.navigationController?.isNavigationBarHidden = true
}

ทั้งสองวิธีซ่อนตัวควบคุมการนำทางจาก ViewControllers ทั้งหมด


1
คุณจำเป็นต้องจัดการมันด้วยตนเองสำหรับผู้ดูโปรแกรมควบคุมทั้งหมด .. คุณไม่สามารถทำได้สำหรับคนใดคนหนึ่ง ..
itsji10dra

คำตอบ:


321

หากคุณรู้ว่ามุมมองอื่น ๆ ทั้งหมดควรมีแถบปรากฏให้เห็นคุณสามารถใช้viewWillDisappearเพื่อตั้งค่าให้มองเห็นได้อีกครั้ง

ในสวิฟต์:

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    navigationController?.setNavigationBarHidden(true, animated: animated)
}

override func viewWillDisappear(_ animated: Bool) {
    super.viewWillDisappear(animated)
    navigationController?.setNavigationBarHidden(false, animated: animated)
}

1
คำตอบนี้มีประสิทธิภาพมากขึ้น ลองนึกถึงรหัสซ้ำ ๆ กับ ViewController ใหม่แต่ละรายการที่คุณเพิ่ม stackoverflow.com/a/39679506/5079380
Amr ElAdawy

252

สวิฟท์ 3

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)

    // Hide the navigation bar on the this view controller
    self.navigationController?.setNavigationBarHidden(true, animated: animated)
}

override func viewWillDisappear(_ animated: Bool) {
    super.viewWillDisappear(animated)

    // Show the navigation bar on other view controllers
    self.navigationController?.setNavigationBarHidden(false, animated: animated)
}

3
ด้วยการเอาชนะไม่ลืมที่จะเรียกวิธีการที่ยอดเยี่ยม: super.viewWillAppear (ภาพเคลื่อนไหว) และ super.viewWillDisappear (ภาพเคลื่อนไหว)
NielsKoole

มันลบลิงค์ที่บอกว่ากลับมา?
Cons Bulaquena

ฉันเชื่อว่ามันจะไม่ทำงานได้ดีกับ "ปัดกลับ" ในระดับภาพ แต่ทุกอย่างใช้ได้ดี ขอบคุณ!
tzaloga

หมายเหตุด้านข้าง: self.ไม่จำเป็น
ฆ่า

ในการปัดย้อนกลับจากมุมมองที่มีแถบนำทางไปยังมุมมองที่มีแถบนำทางที่ซ่อนอยู่เราจะนำแถบนำทางไปใช้ใหม่ได้อย่างไร
T.Okahara

77

คุณสามารถยกเลิกการซ่อนnavigationControllerในviewWillDisappear

override func viewWillDisappear(animated: Bool)
{
    super.viewWillDisappear(animated)
    self.navigationController?.isNavigationBarHidden = false
}

สวิฟท์ 3

override func viewWillDisappear(_ animated: Bool) {
    super.viewWillDisappear(animated)

    self.navigationController?.setNavigationBarHidden(false, animated: animated)
}

21

คุณสามารถสร้างส่วนขยายสำหรับสิ่งนี้ได้ดังนั้นคุณจะสามารถนำส่วนขยายนั้นมาใช้ซ้ำได้โดยไม่ต้องใช้ส่วนนี้ซ้ำแล้วซ้ำอีกในตัวควบคุมมุมมองทุกตัว

import UIKit

extension UIViewController {
    func hideNavigationBar(animated: Bool){
        // Hide the navigation bar on the this view controller
        self.navigationController?.setNavigationBarHidden(true, animated: animated)

    }

    func showNavigationBar(animated: Bool) {
        // Show the navigation bar on other view controllers
        self.navigationController?.setNavigationBarHidden(false, animated: animated)
    }

}

ดังนั้นคุณสามารถใช้วิธีการขยายดังต่อไปนี้

    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        hideNavigationBar(animated: animated)
    }

    override func viewWillDisappear(_ animated: Bool) {
        super.viewWillDisappear(animated)
        showNavigationBar(animated: animated)
    }

7
ไม่คุ้มกับการขยายใช่หรือไม่ :)
Joris Weimar

3
ขึ้นอยู่กับจำนวนการดูที่คุณซ่อน / แสดงแถบนำทาง ฉันรู้สึกเหมือนกรณีส่วนใหญ่คุณซ่อนเฉพาะอันแรก แต่ถ้าคุณทำมันมากการขยายก็ดี
jnwagstaff

แน่นอนมันไม่คุ้มค่า อย่าประดิษฐ์สิ่งที่มีอยู่แล้ว
Thafer Shahin

8

ใน Swift 3 คุณสามารถใช้ isNavigationBarHidden Property เพื่อแสดงหรือซ่อนแถบนำทาง

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    // Hide the navigation bar for current view controller
    self.navigationController?.isNavigationBarHidden = true;
}

override func viewWillDisappear(_ animated: Bool) {
    super.viewWillDisappear(animated)
    // Show the navigation bar on other view controllers
   self.navigationController?.isNavigationBarHidden = false;
}

3

วิธีแสดงแถบการนำทางใน Swift:

self.navigationController?.setNavigationBarHidden(false, animated: true)
self.navigationController?.navigationBar.isHidden = false
self.navigationController?.isNavigationBarHidden = false

3

วิธีซ่อนแถบนำทางใน Swift:

self.navigationController?.setNavigationBarHidden(true, animated: true)
self.navigationController?.navigationBar.isHidden = true
self.navigationController?.isNavigationBarHidden = true

1
self.navigationController? .setNavigationBarHidden (จริง, มีชีวิตชีวา: จริง) ทำงานให้ฉัน
Nate Uni

0

ใน iOS 8 ทำได้ไหม

navigationController?.hidesBarsOnTap = true

แต่เมื่อเป็นส่วนหนึ่งของUINavigationController

ทำให้เป็นเท็จเมื่อคุณต้องการมันกลับมา


0

ฉันใช้ตัวแปรด้านบนและแยกส่วนของแอพของฉันเพื่อฝังใน NavControllers ที่แตกต่างกัน ด้วยวิธีนี้ฉันไม่ต้องรีเซ็ตการเปิดเผย มีประโยชน์มากในลำดับการเริ่มต้นตัวอย่างเช่น



0

เรียกเมธอด set hide ในมุมมองจะปรากฏและหายไป หากคุณจะไม่เรียกใช้เมธอดในมุมมองจะหายไปพร้อมกับสถานะเป็นเท็จมันจะซ่อนแถบนำทางในลำดับชั้นการนำทางที่สมบูรณ์

 override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    self.navigationController?.setNavigationBarHidden(true, animated: true)
}

override func viewWillDisappear(_ animated: Bool) {
    super.viewWillDisappear(animated)
    self.navigationController?.setNavigationBarHidden(false, animated:true)
}

นี่คือการตอบสนองการคัดลอก / วาง อะไรคือความแตกต่างระหว่างการตอบกลับของคุณกับการตอบกลับที่เท่าเทียมกัน 2 หรือ 3 ข้อที่นี่?
Starsky

-3

คุณสามารถทำได้จากตัวควบคุมหน้าต่าง (Swift3)

class WindowController: NSWindowController {

    override func windowDidLoad() {
        super.windowDidLoad()

        window?.titleVisibility = .hidden
    }
}

4
Window Controller คืออะไร
MBH

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