Programing

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

lottogame 2020. 8. 22. 11:28
반응형

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

또 다른 접근 방식은 self.automaticallyAdjustsScrollViewInsets = YES;뷰 컨트롤러 에서 설정 하는 것입니다. 이것은 기본적으로 활성화되어 있습니다. 그러나 귀하의 경우 :

EGORefreshHeaderView를 사용하고 있습니다. UITableView의 contentInset과 함께 재생됩니다. 그래서 당신이 그것을 놓으면 헤더는 이전 값을 복원하는 대신 상단 삽입을 재설정합니다.


위의 답변은 문제를 해결할 수 있지만 다른 많은 문제를 일으킬 수 있습니다. 예를 들어, 탐색 모음이 불투명 해져 모든보기를 아래로 밀어 내므로 사용자 지정보기가 Y 중심에 있지 않습니다.

반투명 탐색 모음이 있어도이 문제가 발생하지 않으며 iOS 11 이상에 게시 한 문제도 발생하지 않습니다. 그러나 iOS 9부터 모든 iOS 플랫폼에서 작동하도록하는 해결 방법을 찾지 못했습니다.


뷰를 완벽하게 제어하고 iOS의 잘못된 조정을 피하려면 UITableView를 하위 클래스로 만들고-(void) willMoveToWindow : (UIWindow *) newWindow에서 삽입 (스크롤 및 표시기 모두)을 조정합니다. 나를 위해 작동합니다.


또 다른 옵션은 소스 코드 모드에서 Info.plist 파일을 열고 다음 정보를 입력하는 것입니다.

<key>UIViewControllerBasedStatusBarAppearance</key>
<false/>
<key>UIStatusBarHidden</key>
<true/>

도움이 되었기를 바랍니다.

참고 URL : https://stackoverflow.com/questions/18953509/how-to-prevent-uinavigationbar-from-covering-top-of-view-in-ios-7

반응형