Swift의 첫 번째 ViewController에서 탐색 막대를 숨기는 방법은 무엇입니까?


258

첫 번째 ViewController 또는 특정 ViewController에서 탐색 모음을 신속하게 숨기려면 어떻게해야합니까?

나는 다음 코드를 사용했다 viewDidLoad():

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

또한 viewWillAppear:

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

두 방법 모두 탐색 컨트롤러를 모든 ViewController에서 숨 깁니다.


1
모든 viewcontrollers에 대해 수동으로 관리해야합니다. 어떤 것도 할 수 없습니다.
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 2012 년

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 메소드를 호출하는 것을 잊지 마십시오 : super.viewWillAppear (animated) 및 super.viewWillDisappear (animated)
NielsKoole

그것은 다시 말하는 링크를 제거합니까?
단점 Bulaquena

나는 그것이 시각적 수준에서 "뒤로 스 와이프"와 잘 작동하지 않을 것이라고 확신했지만 모든 것이 정상입니다. 감사!
tzaloga

참고 사항 : self.필요하지 않습니다.
Fayer

스 와이프하여 탐색 모음이있는보기에서 숨겨진 탐색 모음이있는보기까지 탐색 모음 페이딩을 다시 구현하는 방법은 무엇입니까?
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

스위프트에서 탐색 막대를 숨기는 방법 :

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

1
self.navigationController? .setNavigationBarHidden (true, animated : true) 나를 위해 일했다
Nate Uni

0

iOS 8에서는 다음과 같이하십시오.

navigationController?.hidesBarsOnTap = true

그러나 UINavigationController 의 일부인 경우에만

다시 원하면 허위로


0

위의 변형을 사용하고 다른 NavController에 포함되도록 앱의 섹션을 분리합니다. 이렇게하면 가시성을 재설정 할 필요가 없습니다. 예를 들어 시작 시퀀스에 매우 유용합니다.


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

0

보기에서 set hide 메소드를 호출하면 나타납니다. 뷰에서 메소드를 호출하지 않으면 false 상태로 사라지고 완전한 탐색 계층 구조에서 탐색 막대가 숨겨집니다.

 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
윈도우 컨트롤러 란 무엇입니까?
MBH

이것은 iOS가 아닌 macOS를위한 것입니다
Koen.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.