Làm cách nào để ẩn một thanh điều hướng khỏi ViewContoder đầu tiên trong Swift?


258

Làm cách nào tôi có thể ẩn một thanh điều hướng khỏi ViewContoder đầu tiên hoặc một ViewContoder cụ thể trong swift?

Tôi đã sử dụng mã sau đây trong viewDidLoad():

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

và cũng trên viewWillAppear:

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

Cả hai phương thức đều ẩn bộ điều khiển điều hướng khỏi tất cả các ViewControllers.


1
bạn cần quản lý thủ công cho tất cả các trình điều khiển chế độ xem .. bạn không thể làm điều đó cho bất kỳ ai ..
Itsji10dra

Câu trả lời:


321

Nếu bạn biết rằng tất cả các chế độ xem khác sẽ hiển thị thanh, bạn có thể sử dụng viewWillDisappearđể đặt lại hiển thị.

Trong Swift:

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
Câu trả lời này hiệu quả hơn. Hãy nghĩ về mã lặp đi lặp lại với mỗi ViewContoder mới mà bạn thêm. stackoverflow.com/a/39679506/5079380
Amr ElAdawy

252

Swift 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
Với ghi đè, đừng quên gọi các phương thức siêu: super.viewWillAppear (hoạt hình) và super.viewWillDisappear (hoạt hình)
NielsKoole

Nó có loại bỏ các liên kết nói lại?
Nhược điểm Bulaquena

Tôi đã bị thuyết phục rằng nó sẽ không hoạt động tốt với "vuốt ngược" ở mức độ trực quan, nhưng mọi thứ đều ổn. Cảm ơn!
tzaloga

Lưu ý bên: self.không cần thiết.
Fayer

Khi vuốt ngược lại, từ chế độ xem với thanh điều hướng đến chế độ xem với thanh điều hướng bị ẩn, làm cách nào để thực hiện lại thanh điều hướng mờ dần?
T.Okahara

77

Bạn có thể thôi ẩn navigationControllertrongviewWillDisappear

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

Swift 3

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

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

21

Bạn cũng có thể tạo một tiện ích mở rộng cho việc này để bạn có thể sử dụng lại tiện ích mở rộng mà không cần thực hiện lặp đi lặp lại trong mọi trình điều khiển chế độ xem.

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

}

Vì vậy, bạn có thể sử dụng các phương thức mở rộng như dưới đây

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

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

8
Không thực sự có giá trị gia hạn, phải không? :)
Joris Weimar

3
Phụ thuộc vào số lượt xem bạn đang ẩn / hiển thị các thanh điều hướng. Tôi cảm thấy như hầu hết các trường hợp bạn chỉ ẩn cái đầu tiên nhưng nếu bạn làm điều đó rất nhiều thì phần mở rộng là tốt.
jnwagstaff

Chắc chắn, nó không có giá trị nó. Đừng phát minh ra thứ gì đó đã tồn tại.
Thafer Shahin

8

Trong Swift 3, bạn cũng có thể sử dụng thuộc tính isNavulationBarHidden để hiển thị hoặc ẩn thanh điều hướng

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

Các cách hiển thị Thanh điều hướng trong Swift:

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

3

Các cách để ẩn Thanh điều hướng trong Swift:

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

1
self.navestionControll? .setNavestionBarHidden (đúng, hoạt hình: đúng) làm việc cho tôi
Nate Uni

0

Trong iOS 8, hãy làm như thế

navigationController?.hidesBarsOnTap = true

nhưng chỉ khi nó là một phần của UINavestionControll

làm cho nó sai khi bạn muốn nó trở lại


0

Tôi sử dụng một biến thể ở trên và cô lập các phần trong ứng dụng của mình để được nhúng vào các NavControllers khác nhau. Bằng cách này, tôi không phải thiết lập lại khả năng hiển thị. Rất hữu ích trong các chuỗi khởi động, ví dụ.


0
 private func setupView() {
        view.backgroundColor = .white
        navigationController?.setNavigationBarHidden(true, animated: false)
    }

0

Gọi phương thức ẩn thiết lập trong chế độ xem Sẽ xuất hiện và biến mất. nếu bạn không gọi phương thức trong chế độ xem sẽ biến mất với trạng thái false. Nó sẽ ẩn thanh điều hướng trong phân cấp điều hướng hoàn chỉnh

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

Đây là một phản ứng sao chép / dán. Sự khác biệt giữa phản hồi của bạn và 2 hoặc 3 phản hồi khác bằng nhau ở đây là gì ??
Starsky

-3

Bạn có thể làm điều đó từ bộ điều khiển cửa sổ (Swift3)

class WindowController: NSWindowController {

    override func windowDidLoad() {
        super.windowDidLoad()

        window?.titleVisibility = .hidden
    }
}

4
Bộ điều khiển cửa sổ là gì?
MBH

Đây là dành cho macOS, không phải iOS
Koen.
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.