[ios] UINavigationBar가 iOS 7에서 상단을 덮지 않도록하는 방법은 무엇입니까?

Xcode 5로 업데이트 한 후 내 앱의 모든보기에서 탐색 모음이 아래로 이동했습니다. 다음은 몇 가지 스크린 샷입니다. 첫 번째는 아래로 당겨진 뷰의 모든 것을 보여주고 두 번째는 모든 것을 그대로 보여줍니다. 검색 표시 줄은 탐색 표시 줄에서 시작해야합니다.

모든 콘텐츠
유휴 상태의 모든 콘텐츠

누구든지 내가 이것을 고칠 수있는 방법을 알고 있습니까?

편집 : 나는 이전 에이 권장 사항을 시도했습니다.

if ([self respondsToSelector:@selector(edgesForExtendedLayout)])
        self.edgesForExtendedLayout = UIRectEdgeNone;

그러나 그것은 매우 이상한 결과를 낳습니다.

솔루션 시도

이것은 내비게이션 바의 투명성으로 인해 나타나는이 뷰 컨트롤러 아래에 “슬라이드 메뉴”가 있기 때문일 수 있습니다.



답변

탐색 모음의 반투명 속성을 NO로 설정합니다 .

self.navigationController.navigationBar.translucent = NO;

이렇게하면 탐색 표시 줄과 상태 표시 줄 아래에 표시되는보기가 수정됩니다.

탐색 모음을 표시하고 숨겨야하는 경우

 if ([self respondsToSelector:@selector(edgesForExtendedLayout)])
    self.edgesForExtendedLayout = UIRectEdgeNone;   // iOS 7 specific

당신의 viewDidLoad방법에.


답변

에서 iOS 7기본값으로 모든 컨트롤러 반투명 속성 값은 NO 반투명 속성을 설정하므로, YES없는 이 문제에 대한.

self.navController.navigationBar.translucent = NO;


답변

이 화면의 View Controller 속성 검사기에서 “Extend edge”를 비활성화 할 수 있습니다 (아래 이미지 참조).

여기에 이미지 설명 입력


답변

이것은 iOS 8.1에서도 신속하게 작동합니다.

navigationController?.navigationBar.translucent = false


답변

에서 반투명도를 유지하려면 navigationBar끝에 viewDidLoad또는 다음 viewWillAppear코드 줄을 추가하십시오.

[self.view sendSubviewToBack:self.tableView]

어쨌든 scrollView하위 클래스 ( UITableView, UICollectionView등)가 index현재보기 에서 0에 subviews있으면 navigationBar. 또한 iOS7 이전 버전의 UI에도 영향을 미치지 않아야합니다.

편집UITableView 프로그래밍 방식으로
초기화 하면 이것을 사용하여 뷰에 추가하는 것이 가장 좋습니다.[self.view insertSubview:self.tableView atIndex:0];


답변

스위프트 4 :

viewDidLoad 메서드에서 다음 코드 줄을 설정합니다.

self.navigationController?.navigationBar.isTranslucent = false


답변

다음 URL에 표시된대로이 메서드를 뷰 컨트롤러에 추가 할 수 있습니다 .

-(void)viewDidLayoutSubviews
{
    [super viewDidLayoutSubviews];
    self.searchBar.frame =
    CGRectMake(0, self.topOfViewOffset, self.searchBar.frame.size.width, self.searchBar.frame.size.height);
}