티스토리 뷰

iOS

iOS ) NavigationBar

Zedd0202 2018. 8. 19. 14:57
반응형

안녕하세요 :) Zedd입니다.

사실 iOS개발이 익숙하지 않다면 엄청 헷갈릴만 한 NavigationBar에 관련된 다양한 코드들...이번기회에 싹 정리해보려고 합니다. 

틀린 부분이나 개선해야 할 코드들이 있다면 댓글이나 PC화면 오른쪽 하단에 있는 채널서비스를 통해 메세지 주시길 바랍니다 꼭!!!!! XD




 숨기기


 override func viewWillAppear(_ animated: Bool) {

        super.viewWillAppear(animated)

        self.navigationController?.isNavigationBarHidden = true

        또는 //self.navigationController?.navigationBar.isHidden = true

    }


위 코드는 해당 navigationController로 묶인 모든 ViewController들의 navigationBar를 숨기므로 disAppear에서 다시 false로 해줘야함.



 override func viewWillDisappear(_ animated: Bool) {

        super.viewWillDisappear(animated)

        self.navigationController?.isNavigationBarHidden = false

        또는 //self.navigationController?.navigationBar.isHidden = false

    }


※주의사항


만약 내가


 self.navigationController?.isNavigationBarHidden = true


로 NavigationBar를 숨겼다면, 


 self.navigationController?.isNavigationBarHidden = false


로 다시 보여주도록 한다. 


self.navigationController?.navigationBar.isHidden = false


이걸로 false를 주면, false를 줬음에도 불구하고 NavigationBar가 안보인다.

즉, 짝꿍을 맞춰주란 소리임.



색깔 바꾸기



color프로퍼티가 3개가 있는데, 저는 이게 항상 헷갈렸어요,............글을 쓴 이유기도 하고...좀만 안쓰면 아..ㅇㅣ게....하면서 구글링했는데 이제 다시는 구글링 안하도록 하겠


- tintColorThe tint color to apply to the navigation items and bar button items.

navigation items 과 bar button items에 적용되는 색깔임.


self.navigationController?.navigationBar.tintColor = .red


red로 줘보자. 그렇다면 tintColor는 navigation items 과 bar button items에 적용되는 색깔이니까 빨간색이 나올 것.




저 x는 이미지 assets인데,

원래 검정색이다. 빨간색으로 나오게 하고 싶지 않다면



렌더링 모드를 original image로 주면 된다. 




- barTintColor: The tint color to apply to the navigation bar background. 

NavigationBar background로 적용되는 색깔. isTranslucent를 false로 설정하지 않는 한 기본적으로 반투명임. 



self.navigationController?.navigationBar.barTintColor = .gray


red는 너무 눈아파서;; gray로 해보겠음



view의 background도 똑같은 gray로 지정해보겠음




똑같은 gray지만 색깔이 뭔가 다른듯한 느낌을 받을 수 있음. 

이유는 바로 위에서 언급했듯이, " isTranslucent를 false로 설정하지 않는 한 기본적으로 반투명임." <- 때문


self.navigationController?.navigationBar.isTranslucent = false


를 지정해주면 



똑같아짐. 




비교짤. 


마지막, backgroudColor.

엥...방금 barTintColor로 NavigationBar Background지정한거 아님?..

ㅇㅇ맞음


이 backgroundColor는 


self.view.backgroundColor = .gray


여기서 사용되는 backgroundColor와 같음. 

바로 view의 backgroundColor임. 


self.navigationController?.navigationBar.backgroundColor = .gray


위 코드는 



이렇게 됨.

이렇게 ㅇㅇ


barTintColor와 비교해보면,


요게 barTintColor.


암튼 navigationBar의 color는 다 봐따


navigationBar bottom bolder line. 



navigationBar와 view를 나누는 저 line...


- 없애고 싶을 때.


self.navigationController?.navigationBar.setBackgroundImage(UIImage(), for: .default)

self.navigationController?.navigationBar.shadowImage = UIImage()



self.navigationController?.navigationBar.shadowImage = UIImage()


self.navigationController?.navigationBar.isTranslucent = false




self.navigationController?.navigationBar.setBackgroundImage(UIImage(), for: .default)

self.navigationController?.navigationBar.clipsToBounds = true



전부 아래그림과 같이 



선이 없어짐.


위 3코드 중 2번째 코드.



self.navigationController?.navigationBar.shadowImage = UIImage()


self.navigationController?.navigationBar.isTranslucent = false


 

이거는 navigationBar에 barTintColor를 따로 줘야함. 안주면



이렇게 됨. 


나머지 2개(첫번째, 세번째)는 따로 barTintColor를 주지 않아도



view의 색깔에 맞춰짐. 

가능한 이유는 


self.navigationController?.navigationBar.setBackgroundImage(UIImage(), for: .default)


때문. 



title 색깔 바꾸기.



이건..넣을까 말까 고민했는데..그냥 넣..



self.title = "Zedd"




기본적으로 검정색.



self.title = "Zedd"


self.navigationController?.navigationBar.titleTextAttributes = [.foregroundColor: UIColor.green]


그냥 attribute넣어주면 된다.



attribute만..있다면....얼마든지 커스텀 가능해







반응형

'iOS' 카테고리의 다른 글

iOS12 ) Notification  (2) 2018.09.13
iOS ) Decodable  (2) 2018.08.29
iOS 12 Beta 설치 방법  (0) 2018.07.31
iOS ) UIStatusBar  (5) 2018.07.28
iOS ) windowLevel  (0) 2018.07.28