[iphone] 새로운 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 (y = statubar height + nav bar height)값을 추가하여 처리해야 iOS 7합니까?

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

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

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

그 결과 내 콘텐츠가 탐색 표시 줄과 상태 표시 줄 아래에 나타납니다.

메인 화면의 높이를 가져 와서 상태 표시 줄의 높이와 내비게이션 막대의 높이를 빼서 높이를 직접 계산할 수 있다는 것을 알고 있지만 불필요한 추가 작업처럼 보입니다.

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

최신 정보:

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

self.navigationController.navigationBar.translucent = NO;

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

그러나 내비게이션 바를 반투명하게하려는 경우에 대한 수정 사항을 찾지 못했습니다. 예를 들어, 사진을 전체 화면으로 볼 때 내비게이션 바가 반투명하고 그 아래에 뷰가 표시되도록하고 싶습니다. 작동하지만 내비게이션 바 표시 / 숨기기를 전환 할 때 더 이상한 결과를 경험했습니다. 첫 번째 하위 뷰 (a UIScrollView)는 매번 변경된 경계 y 원점을 가져 옵니다 .



답변

그것은 전적으로 사실이 아닙니다. iOS 7에는 이전 버전의 iOS에서와 같이 레이아웃 동작을 조정할 수있는 새로운 속성이 도입되었습니다. 이 코드 조각을 뷰 컨트롤러에 넣으면 잘 될 것입니다! 내비게이션 바가 차지하는 공간은 자동으로 고려되어야합니다.

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

-(void)viewDidLoad방법에 위의 내용을 추가해야합니다 .

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


답변

스토리 보드의 스크린 샷

Storyboard에서 작업하는 경우 (강력히 권장합니다!) 이것이 해결책입니다.
Storyboard에서 ViewController의 “Extend Edges”를 비활성화 할 수 있습니다. 각 viewController에 대해이 작업을 수행해야합니다. stortyboard에서 viewController 아이콘 (보기 자체 아래에있는 productOwner 옆에 있음)을 클릭 한 다음 속성 검사기를 선택하여 확장 된 가장자리를 비활성화 할 수 있습니다 (이미지 표시와 유사).

이것은 또한 iOS 6과 같은 정렬 선을 설정합니다.

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

그저 훌륭합니다 : D

[최신 정보]

주의 : “가장자리 확장”을 비활성화하면 앱이 iOS7에서 백그라운드로 전환 될 때 탐색 모음에 검은 색 빛이 표시 될 수 있습니다. 글로우는 멀티 태스킹보기에서도 볼 수 있습니다 (홈 버튼을 두 번 누름). 이 문제는 내비게이션 바보기의 배경색을 흰색으로 설정하여 해결할 수 있습니다.

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


답변

OP가 말했듯이 탐색 모음을 불투명하게 설정하는 간단한 해결책이 있습니다. 코드에서이 작업을 수행하는 대신 루트 탐색 모음에 대해 “반투명”을 선택 취소하면됩니다.

여기에 이미지 설명 입력


답변

self.edgesForExtendedLayout=UIRectEdgeNone;

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


답변

이 답변은 모두 유용했습니다. 특히 MQoder의 경우에는 기본 상단 표시 줄을 “불투명 한 검정색 탐색”으로 설정해야했습니다.

여기에 이미지 설명 입력


답변

@One Man Crew의 대답은 맞지만 :

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

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


답변

self.edgesForExtendedLayout = UIRectEdgeNone;

그리고 AppDelegate # application : didFinishLaunchingWithOptions에서이 작업을 수행해야합니다.

self.window.backgroundColor = [UIColor whiteColor];

그렇지 않으면 내비게이션 바의 배경색이 회색으로 바뀝니다. 투명한 탐색 모음이 창과 겹치기 때문입니다.