2009-10-23 3 views
2

UISearchBar가 탐색 모음의 맨 오른쪽에서 맨 왼쪽부터 위치를 잡을 수없는 것처럼 보입니다. -에서 (무효)의 viewDidLoad 방법, 나는 다음과 같은 코드가 있습니다 : UISearchBar 및 UINavigationItem

UISearchBar *sb = [[UISearchBar alloc] initWithFrame:self.tableView.tableHeaderView.frame]; 
sb.delegate = self; 
self.navigationItem.titleView = sb; 
[sb sizeToFit]; 
[sb release]; 

구축하고 처음 눈에 잘 보이는, 실행

. 그러나 더 자세히 살펴보면 왼쪽에 여백/공간이 있음을 알 수 있습니다. 이것은 사물의 거대한 계획에서 큰 문제는 아니지만 검색 창을 탭하여 검색을 시작하면 취소 버튼이 애니메이션으로 표시됩니다. 검색 창은 약간 오른쪽으로 배치되어 있기 때문에, 애니메이션이 육포이며, 취소 버튼과 같이 말 떨어진다 : link text

것 같다을 같이 UINavigationItem는이 3 개 개의 셀이있는 테이블과 같은 경우 처음에는 제거 할 수없는 마지막에 패딩을 넣을 수 있습니다. 또한이를 모두 병합 한 다음 검색 창을 배치 할 수있는 방법이없는 것 같습니다. AppStore 검색에 탐색 모음에 검색 막대가 있으며 가장자리까지 계속 이동하기 때문에이 모양이 가능하다는 것을 알고 있습니다. 아무도 내 슬라이드 - 취소 버튼 애니메이션이 제대로 작동 할 수 있도록 검색 막대를 가장자리까지 줄이는 방법을 알고 있습니까?

답변

1

답변을 찾은 것 같습니다. 확인을 위해 테스트하지는 않았지만. 제가 위에서 제공하는 문제에서, 나는 다음과 같은 구조를 가지고 :

탭 표시 줄 컨트롤러 -> 탐색 컨트롤러 -> 뷰 컨트롤러 (들) 문제의 검색 창 차례로이었다 뷰 컨트롤러에

했다 내비게이션 컨트롤러에서 어떤 내비게이션 컨트롤러가 탭 바에 있는지 확인합니다.

Stanford CS 193P (2009 년 봄) 강좌를 우연히보고 있었고 강의 13 강의 마지막 부분에 답변이 제시되었을 수 있습니다.

this structure http://img143.imageshack.us/img143/6/viewcontrollerstructure.jpg

(탭 바 컨트롤러에 인접)이 저면 컨트롤러 검색 창 제어했다 뷰 컨트롤러이었다 앨런 카니 스트라 프리젠 앱의 구조가이 구조를 가져야한다고 밝혔다. 그는 이런 식으로 끝나지 않으면 문제가 생길 것이라고 경고했습니다. 아마도 내가 직면 한 문제일까요? 나는 그렇게 믿는다. 탐색 모음이 될 경우 당신의 검색 창을 루트 뷰 컨트롤러에,

- (void)viewWillAppear:(BOOL)animated 
{ 
    [self.navigationController setNavigationBarHidden:YES animated:animated]; 
} 

- (void)viewWillDisappear:(BOOL)animated 
{ 
    [self.navigationController setNavigationBarHidden:NO animated:animated]; 
} 

는 그래서 UISearchBar가 UINavigationBar의 장소에 표시 얻을 :

0

어쩌면 사과가 이런 일을하기 위해 UISearchDisplayController를 사용하고있을 수도 있습니다.

+0

나는 UISearchDisplayController를 시도했다. 그러나 '컨트롤'은 탐색 모음이 아닌 테이블 머리글 (검색하지 않을 때)에 검색 표시 줄을 넣습니다. 그런 다음 검색 막대를 탭하면 연락처 검색과 유사하게 탐색 막대 위로 움직여 움직입니다. 나는 그것을 좋아하지 않는다. AppStore 검색과 같이 보이기를 원합니다. 현재 검색 중인지 여부에 관계없이 탐색 막대에 검색 막대가 있어야합니다. 그게 가능합니까? – tbehunin

+0

iPhone SDK에서 가져온 "내비게이션 막대는 기본적으로 왼쪽에 뒤로 버튼과 가운데에 제목을 표시합니다. 사용자 정의 왼쪽, 가운데 또는 오른쪽보기를 지정하여이 동작을 변경할 수 있습니다." 어쩌면 왼쪽 및 가운데보기로 실험 할 수 있습니다. 실제 네비게이션 바를 가져야 할까? – caahab

+0

사용자 정의 왼쪽 및 가운데보기로 실험했지만 여전히 AppStore 검색처럼 보이지 않았습니다. 실제 탐색 모음을 숨기고 검색을 표보기의 머리글에 붙여 네비게이션 바처럼 보이게했습니다. 그것은 완벽하게 작동했습니다. 유일한 문제는 검색 창이있는 머리글이 화면과 함께 스크롤된다는 것입니다. 내비게이션 막대처럼 고정되어 있어야합니다. 다른 아이디어? 간단히 검색을 AppStore 검색처럼 보이기 만하면됩니다. 나는 그렇게하기가 어렵다는 것을 믿을 수 없다. :( – tbehunin

5

사실, 정말 간단한 해결책이 있습니다.

UIView *hackView = [[UIView alloc] initWithFrame:CGRectZero]; 
UIBarButtonItem *hackItem = [[UIBarButtonItem alloc] initWithCustomView:hackView];  
self.navigationItem.backBarButtonItem = hackItem; 
[hackView release]; 
[hackItem release]; 

UISearchBar *searchBar = [[UISearchBar alloc] initWithFrame:CGRectZero]; 
[searchBar sizeToFit]; 
self.navigationItem.titleView = searchBar; 
[searchBar release]; 

하는 init이 아닌에는 loadView 메소드에서이 작업을 수행해야합니다 : 당신이 할 일은 뒤로 항목에 대한 폭 제로보기를 만들 수 있습니다. 그게 왜 차이가 나는지 모르겠지만, 그렇지 않습니다.

분명히 타이밍에 관한 것입니다. 그것을 위해 loadView가 나를 위해 일하는 것을 멈추었지만, viewWillAppear에 넣는 것은 작동합니다 (물론 한 번만 수행되는 체크와 함께). 그 생각은 이미 초기화가 완료된 후에 titleView를 설정하는 것이라고 생각합니다.

2

다음 코드는 그냥이의 UIViewController의 내비게이션 바 숨 깁니다 정상적으로!