programing

새로운 iOS7 SDK로 보기 위에 탐색 모음이 나타납니다.

i4 2023. 7. 5. 20:04
반응형

새로운 iOS7 SDK로 보기 위에 탐색 모음이 나타납니다.

CGRect cgRect1 = [[UIScreen mainScreen] applicationFrame];


UISearchBar  *mySearchBar = [[UISearchBar alloc] 
               initWithFrame:CGRectMake(0, 0, cgRect.size.width, 40)];

mySearchBar.autoresizingMask = 
              UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight ;


UITableView  *myTableView = [[UITableView alloc] 
     initWithFrame:CGRectMake(0, 40, cgRect.size.width, cgRect.size.height-40)];

myTableView.autoresizingMask = 
               UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight;


[self.view addSubview:mySearchBar];
[self.view addSubview:myTableView];

이전 버전에서는 올바르게 작동합니다.이 검색표아나다니타납래에 에 표시됩니다.statusbar및 탐색 모음.tableview됩니다.

하지만 이걸 실행하면,Xcode 5 sdk iOS 7검색 표시줄이 보이지 않고(상태 표시줄과 탐색 표시줄 아래에 배치된 것 같습니다), 테이블 보기 위에 탐색 표시줄이 나타납니다.

으로 고쳐질 것인가요?iOS 7안정적인 방출?

아니면 제 코딩의 문제인가요?

아니면 요?(y = statubar height + nav bar height) 한 치 가 대의 값입니다.iOS 7?

저는 최근에 iOS 7에서 제 앱을 테스트하기 위해 Xcode 5DP를 다운로드했습니다.제가 가장 먼저 알아차리고 확인한 것은 제 보기의 범위가 항상 상태 표시줄과 탐색 표시줄을 고려하여 크기가 조정되지 않는다는 것입니다.

ViewDidLayoutSubviews에서 뷰의 경계를 인쇄합니다.

{{0, 0}, {320, 568}}

그러면 탐색 모음과 상태 표시줄 아래에 내용이 표시됩니다.

메인 화면의 높이를 얻고 상태 표시줄의 높이와 탐색 표시줄의 높이를 빼면 높이를 계산할 수 있다는 것을 알지만, 그것은 불필요한 추가 작업처럼 보입니다.

이 문제를 경험한 다른 사람이 있습니까?

업데이트:

저는 이 특정한 문제에 대한 해결책을 찾았습니다.탐색 모음의 반투명 속성을 NO로 설정합니다.

self.navigationController.navigationBar.translucent = NO;

이렇게 하면 보기가 탐색 모음과 상태 표시줄 아래에 프레임으로 고정되지 않습니다.

하지만 당신이 내비게이션 바를 반투명으로 만들기를 원할 때의 케이스에 대한 해결책을 찾지 못했습니다.예를 들어, 사진 전체 화면을 보는 것은 내비게이션 바를 반투명하게 만들고 그 아래에 있는 뷰를 액자에 넣었으면 합니다.이 방법은 사용할 수 있지만 탐색 모음 표시/숨기기를 전환하면 훨씬 더 이상한 결과가 나타납니다. 번째 첫 번째서뷰브a)((a))UIScrollView는 경계 원점을 매번 변경합니다.

그것은 완전히 사실이 아닙니다.iOS 7에는 이전 버전의 iOS처럼 레이아웃 동작을 조정할 수 있는 새로운 속성이 도입되었습니다.이 코드 조각을 뷰 컨트롤러에 배치하면 바로 이동할 수 있습니다!탐색 모음이 차지하는 공간은 자동으로 계산되어야 합니다.

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

은 당신의 에 을 추가해야 .-(void)viewDidLoad방법.

참고: API가 베타 버전에서 변경되었으므로 iOS 7 및 Xcode 5의 최신 GM 릴리스를 사용해야 합니다.

Screenshot from storyboard

Storyboard에서 일하고 있다면(강력히 추천합니다!) 해결책은 다음과 같습니다.스토리보드에서 View 컨트롤러의 "Edge 확장"을 비활성화할 수 있습니다.각 뷰 컨트롤러에 대해 이 작업을 수행해야 합니다.확장 에지를 사용하지 않도록 설정하려면 stortyboard(뷰 자체 아래의 productOwner 옆)에서 viewController 아이콘을 클릭한 다음 특성 검사기를 선택합니다(이미지에 표시된 것처럼).

이것은 또한 iOS 6처럼 정렬 라인을 설정할 것입니다.

xCode 5의 또 다른 훌륭한 도구는 "미리보기"입니다. 집사 버튼(보조 편집기)을 클릭하고 미리보기를 선택합니다.거기서 당신은 iOS 6를 선택하고 당신의 스토리보드 디자인이 iOS 6에서 어떻게 보일지 볼 수 있습니다.

훌륭합니다.d

[업데이트]

주의: "엣지 확장"을 비활성화하면 iOS7에서 앱이 백그라운드로 들어갈 때 탐색 모음에 검은색 빛이 나타날 수 있습니다. 이 빛은 멀티태스킹 보기에서도 볼 수 있습니다(홈 버튼을 두 번 누름).탐색 막대 보기의 배경색을 흰색으로 설정하여 해결할 수 있습니다.

[self.navigationController.view setBackgroundColor:[UIColor whiteColor]];

OP가 말하는 것처럼, 이것에 대한 간단한 해결책이 있는데, 그것은 탐색 막대를 불투명하게 설정하는 것입니다.코드에서 이 작업을 수행하는 대신 루트 탐색 모음에 대해 "반투명"을 선택 취소합니다.

enter image description here

self.edgesForExtendedLayout=UIRectEdgeNone;

iOS 7 시뮬레이터(Xcode 5 DP5)에서 작동합니다.

이러한 답변은 특히 MQoder의 답변에 모두 도움이 되었지만, 저는 또한 기본 상단 표시줄을 "불투명 검은색 탐색"으로 설정해야 했습니다.

enter image description here

@원맨 크루의 대답은 옳지만,

이전 버전에서 앱을 실행할 때 오류를 방지하려면 이 코드를 사용하는 것이 좋습니다.

 #if __IPHONE_OS_VERSION_MAX_ALLOWED > __IPHONE_6_1
     if ([self respondsToSelector:@selector(edgesForExtendedLayout)])
        self.edgesForExtendedLayout = UIRectEdgeNone;
 #endif

확장 레이아웃의 경우 self.edges = UIRectEdgeNone;

AppDelegate# application:diddenLaunching WithOptions:에서 이 작업을 수행해야 합니다.

self.window.backgroundColor = [UIColor whiteColor];

그렇지 않으면 탐색 모음의 배경색이 회색으로 변경됩니다.투명한 탐색 모음이 창과 겹치기 때문입니다.

사용자가 테이블 보기를 스크롤할 때 투명도를 유지하려면 내용을 설정할 수 있습니다.그 안에:

CGFloat topLayoutGuide = self.topLayoutGuide.length + self.tabBarController.navigationController.navigationBar.frame.size.height;
self.tableView.contentInset = UIEdgeInsetsMake(topLayoutGuide, 0, 0, 0);

한 가지 해결책은 탐색 컨트롤러를 사용하는 것입니다.그러면 문제가 자동으로 해결됩니다.또한 베타 버전이므로 Xcode Preview 버전 대신 Xcode 5를 사용합니다.

언급URL : https://stackoverflow.com/questions/18103715/navigation-bar-appear-over-the-views-with-new-ios7-sdk

반응형