2009-12-31 2 views
2

Gentlepeople, 나는 절차상의 언어의 긴 배경에서 오는 & 아이폰의 초보자입니다. UINavigation 화면에서 TabBar를 숨기면 iPhone SDK 3.1의 화면이 20 픽셀 어긋납니다.

본인은 전체 식품 '레시피 검색 기능을 모방하려고 시도하고있다. 해당 응용 프로그램에서 화면 위쪽에 NavigationBar, 아래쪽에 TabBar 및 화면 위쪽으로 3 개의 단추가 그룹화되어 있습니다. 버튼을 선택하면 아래에서 TabBar를 감싸는 슬라이드 업 화면이 나타납니다. 슬라이드 업 화면에는 선택기와 '완료'버튼이 있습니다. 위에서 다른 버튼을 선택할 수 있다는 사실에서 알 수 있듯이 이것은 모달 화면이 아니며 선택 도구가 동적으로 변경됩니다. 또한 이것은 액션 시트가 아닙니다.

이 동작을 재현, 나는 비 모달 슬라이드 업 화면을 제시 아이폰의 ScrollViewSuite 샘플에서 자동 스크롤 프로젝트를 사용했다. 이것은 잘 돌아갔다. 다른 버튼을 선택하여 슬라이드 업 화면에서 동적으로 선택 도구를 변경할 수 있습니다. 내가 TabBar의를 커버하는 슬라이드 업 화면을 원하기 때문에

, 나는 http://osdir.com/ml/iPhoneSDKDevelopment/2009-01/msg00246.html에서 제안을 사용했다. 간단히 말해 tabBarController.view.frame 높이를 높이면 프레임이 화면보다 커지고 TabBar (하단에 고정됨)가 사용자보기에서 제거됩니다. 슬라이드 업 화면과 TabBar 숨기기 조합이 허용되었습니다. 인생은 상대적으로 장미 빛이었다. NavigationBar를 추가하기 만하면됩니다. 나는 그것을 Navigaion 컨트롤러 화면을 만들기 위해 뷰 컨트롤러에서 IB에서 화면을 변경할 때 TabBar의 숨어있는 경우

는, 나는 어떻게 든보기에서 20 픽셀 변화를 도입!? NavigationBar 자체는 괜찮지 만 밑의 모든 항목은 20 픽셀 씩 위로 이동합니다. 그러나 슬라이드 업 화면은 여전히 ​​괜찮습니다. (20 픽셀은 iPhone의 상태 표시 줄의 높이입니다.)

내 IB는 TabBarCongroller가있는 MainWindow.xib와 그 안에있는 NavigationControllers가있는 표준 배열입니다. 그.

- (void)toggleThumbView 
{ 
if (!thumbViewShowing) 
    { 
    [self createSlideUpViewIfNecessary]; // no-op if slideUpView has already been created 

    //Hide the TabBar, which introduces a 20 pixel shift up of everything except the navigation bar 
    UITabBar *ntoTabBar = self.tabBarController.tabBar; 
    CGRect tbcFrame = self.tabBarController.view.frame; 
    self.tabBarController.view.frame = CGRectMake(tbcFrame.origin.x , 
       tbcFrame.origin.y ,  
       tbcFrame.size.width , 
       tbcFrame.size.height + ntoTabBar.frame.size.height); 

    //The following code really doesn't matter for discussions about the problem, simply resizing the 
    //tabBarController.view.frame above has already introduced the 20 pixel problem 

    CGRect frame = [slideUpView frame]; 
     frame.origin.y -= frame.size.height ; 
     frame.origin.y += ntoTabBar.frame.size.height ; 

    [UIView beginAnimations:nil context:nil]; 
    [UIView setAnimationDuration:0.3]; 
    [slideUpView setFrame:frame]; 
    [UIView commitAnimations]; 

    thumbViewShowing = !thumbViewShowing; 
    } 
} 

나는 autoresizingMask과 autoResizesSubviews을 가지고 노는 시도했다 : 여기

는 코드입니다. 다음은 20 픽셀 이동을 제거합니다.

[self.tabBarController.view setAutoresizesSubviews:NO]; 

불행히도 TabBar가 숨겨지지 않습니다. 20 픽셀을 생각하면 실마리가 될지도 모르겠다. 나는 XIB의 모든 것에 대해 IB의 'Wants Full Screen'을 선택하지 않았지만 아무 소용이 없다. 나는 &을 NIB에서 체크하지 않고 체크했다. 그리고 시뮬레이트 된 인터페이스 엘리먼트를 모두 제거했다. 그래서 프로그램은 크기 조절을해야한다. (나는 시뮬레이트 된 것들이 프로그램 컨트롤을 금지한다고 믿는다.) 다시는 아무것도 보이지 않는다. 그 트릭을. tbcFrame.origin.y를 20 픽셀 씩 늘리면 화면 이동이 없어지지만 NavigationBar가 20 픽셀 낮아지고 아래에있는 모든 항목을 덮어 맨 위에 20 픽셀의 여백을 남깁니다. 이 문제는 3.0 SDK 시뮬레이터에서 나타 났으며 3.1.2로 업그레이드되었습니다. 최신/최고가 좋았지 만, 내 문제를 해결하지 못했습니다.

이미 대머리가 아니었다면 내 머리를 꺼내 것입니다. 어디서 볼 수 있는지에 대한 제안은 크게 감사하겠습니다. 별도의 ViewController를 통해 슬라이드 업 뷰를 푸시하고 TabBar의 프로그램 숨김을 제거하는 것이 더 낫지 않습니까? 뭔가 같은 :

DetailViewController *dvc = [[DetailViewController alloc] init]; 
dvc.hidesBottomBarWhenPushed = YES; 
[[self navigationController] pushViewController:dvc animated:YES]; 
[dvc release]; 

가 사전에 감사합니다,

밥 B.

답변

0

내가 이해할 수 있다면 문제는 "일종의"모달보기가 내비게이션 막대 20px를 하단에서 재정의한다는 것입니다. 그렇지 않습니까?

예인 경우 "일종의"모달보기 인 NIB 파일로 이동하여 "상태 표시 줄"옵션을 "선택하지 않음"으로 선택했는지 확인하십시오. 그런 경우, 예를 들어 "회색"으로 변경하십시오.

이 문제를 해결하기를 바랍니다. 그렇지 않다면 알려주세요. 나는 그것이 무엇인지 알리려고 노력할 것입니다.

건배, VFN

+0

비르 질 리오, 귀하의 의견 감사합니다. 슬라이드 업 뷰 (별칭 ThumbView)는 NIB가 아닌 SearchView에서 프로그래밍 방식으로 생성됩니다. 그러나 SearchView NIB에서 상태 표시 줄을 '회색'으로 변경했지만 아무 것도하지 않았습니다. 또한 Info.plist에서 UIStatusBarStyle을 설정하고 Info.plist에서 UIStatusBarHidden을 선택/선택 취소했습니다. UIStatusBarHidden을 확인하면 실제로 20 픽셀 이동이 없지만 상태 표시 줄을 전혀 사용하지 않아도됩니다. 내 앱과 내가 모방하려고하는 앱의 스크린 샷을 이메일로 보냈습니다.

+0

<계속> 나는 원래의 출처가 잘못되었습니다. 게시하다; 에뮬레이트하는 앱은 실제로 테이블 뷰입니다. 테이블에서 셀을 선택하면 화면의 아래쪽 절반을 덮는 선택기보기가 위로 이동하여 사용자는 화면의 위쪽 절반에있는 세 개의 셀 중 하나를 동적으로 선택할 수 있습니다. 귀하의 의견과 시간에 감사드립니다. 필자는 테이블 구동 대신 앱 구동 버튼을 사용하여 차이를 만들어야한다고 생각하지 않습니다.하지만 그것은 내 부분에 대한 가정입니다. 다시 고맙습니다. -Bob B. –

관련 문제