0

1) 아래의 세 줄의 코드 차이점은 무엇입니까?탐색 모음을 숨기시겠습니까?

2) 또한 viewController로 돌아가고 이전 viewController가 동일한 접근 방식으로 숨겨진 navigationBar를 설정 한 경우에도 왜 코드의 세 번째 줄만 작동합니까? [self.navigationController setNavigationBarHidden:NO] 내 모든 가정은 동일한 3 가지 코드로 수행됩니다. 맡은 일?

self.navigationController.navigationBar.hidden = NO; 
[self.navigationController.navigationBar setHidden:NO]; 
[self.navigationController setNavigationBarHidden:NO]; 

후속 :

을 나는이 코드를 실행해야하는 이유는 때 그것은 단지 배경 이미지 설정되는 작업, 작동

[self.navigationController.navigationBar setBackgroundImage:incorrectAnswerNavigationBarBackgroundImage forBarMetrics:UIBarMetricsDefault]; 

을, 그렇지 않으면 탐색 모음은 흰색입니다 . 나는 모두에게이 라인이있는 경우

: 나는이 탐색 모음을위한 공간이 아래로 튀어하지만 그냥 흰색입니다 self.navigationController.navigationBar.hidden = NO;을두면

[self.navigationController setNavigationBarHidden:NO]; 
self.navigationController.navigationBar.hidden = NO; 

을, 어떤 배경 이미지가 없습니다. 두 줄이 모두 있으면 작동하고 배경 이미지가 있습니다.

답변

2

처음 두 개는 기능적으로 동일합니다. 다른 하나는 점 표기법을 사용하는 반면 다른 하나는 점 표기법을 사용합니다. 이 두 메서드는 모두 내비게이션 컨트롤러의 navigationBar 속성에 대해 - (void) setHidden:(BOOL)hide을 실행합니다.

이제 세 번째 방법은 완전히 다른 방법입니다. 그것은 - (void) setNavigationBarHidden:(BOOL)hide이고 UINavigationController에 정의되어 있습니다. 이 방법이 작동하는 이유는이 방법은 네비게이션 바를 숨기고 싶다는 것을 네비게이션 컨트롤러에 알려주는 반면, 처음 네 개의 네비게이션 바는 숨겨 지도록 수동으로 설정합니다. UINavigationController이 탐색 모음의 숨겨진 속성을 수정하는 메서드를 호출하면 UINavigationController에 알리는 방법을 사용하기 위해 setNavigationBarHidden: 메서드가 만들어 졌으므로 처음 두 변경 내용이 취소되면 탐색을 숨겨야합니다. 막대기로 표시하고 변경하지 마십시오.

편집 :이 질문의 두 번째 부분에 대해서는 실제로 - (void)setNavigationBarHidden:(BOOL)hidden animated:(BOOL)animatedUINavigationController으로 호출해야합니다. 이것이 UINavigationController에 대한 적절한 문서화 된 방법입니다.

+0

질문에 시간을내어 주셔서 감사합니다. 나는 일종의 약혼자입니다. 왜 나는 다른 하나 이상을 사용합니까? – drc

+0

첫 번째 두 개를 사용하여 상호 교환 할 수 있습니다. 그것은 스타일 선택입니다. 그러나 네비게이션 막대를 숨기려면 먼저 UINavigationController의 Apple 메서드가 첫 번째 요소를 사용하면 변경 내용을 실행 취소하지 않는다는 보장이 없으므로 Apple이 제공 한 문서화 된 메서드를 사용하여 네비게이션 막대를 숨기려고합니다. 두. 세 번째 것은 navigationBar의 숨겨진 속성을 수동으로 엉망으로 만들지 않으므로 숨길 것이라는 보장이 있습니다. – Nobosi

+0

고마워! 그러나이 메소드 [self.navigationController.navigationBar setBackgroundImage :는 [self.navigationController setNavigationBarHidden : NO] 만 호출하면 작동하지 않습니다. self.navigationController.navigationBar.hidden이 아니라 동일한 속성을 변경했다고 생각합니까? – drc

관련 문제