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];
그렇지 않으면 내비게이션 바의 배경색이 회색으로 바뀝니다. 투명한 탐색 모음이 창과 겹치기 때문입니다.