문제

탐색 모음에서 UISearchBar를 맨 왼쪽에서 맨 오른쪽으로 배치할 수 없는 것 같습니다.-(void)viewDidLoad 메서드에는 다음 코드가 있습니다.

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

빌드하고 실행해 보면 언뜻 보기에 괜찮아 보입니다.그러나 좀 더 자세히 살펴보면 왼쪽에 여백/공간이 있음을 알 수 있습니다.큰 계획에서는 큰 문제가 아니지만 검색을 시작하기 위해 검색창을 탭하면 취소 버튼이 표시되도록 애니메이션으로 표시됩니다.검색 표시줄이 약간 오른쪽에 위치하기 때문에 애니메이션이 불안정하고 취소 버튼이 다음과 같이 끝에서 떨어집니다.링크 텍스트

UINavigationItem은 세 개의 셀이 있는 테이블과 같습니다. 첫 번째 셀과 마지막 셀에는 제거할 수 없는 패딩이 있습니다. 또한 이를 모두 '병합'한 다음 배치할 수 있는 방법도 없는 것 같습니다. 거기 검색창이요.AppStore 검색에는 탐색 표시줄에 검색 표시줄이 있고 가장자리까지 계속 표시되기 때문에 이러한 모양이 가능하다는 것을 알고 있습니다.슬라이드인 취소 버튼 애니메이션이 제대로 작동하도록 검색창을 가장자리까지 이동시키는 방법을 아는 사람이 있나요?

도움이 되었습니까?

해결책 3

답을 찾은 것 같습니다. 비록 테스트를 통해 검증하지는 않았지만요.위에서 제공한 문제에는 다음과 같은 구조가 있습니다.

탭바 컨트롤러 -> 네비게이션 컨트롤러 -> 뷰 컨트롤러

문제의 검색 표시줄은 뷰 컨트롤러에 있었고, 이는 다시 탐색 컨트롤러에 있었고, 탐색 컨트롤러는 탭 표시줄에 있었습니다.

스탠포드 CS 193P(2009년 봄학기) 강좌를 무심코 보고 있었는데 13강 말미에 답이 나왔을지도 모르겠습니다.Alan Cannistraro는 Presence 앱의 구조가 다음과 같은 구조를 가져야 한다고 말했습니다.

이 구조는 http://img143.imageshack.us/img143/6/viewcontrollerstructure.jpg

여기서 하단 뷰 컨트롤러(탭 막대 컨트롤러에 인접)는 검색 막대 컨트롤이 있는 뷰 컨트롤러였습니다.그는 이런 방식으로 하지 않으면 "문제에 봉착하게 될 것"이라고 경고했다.아마도 내가 직면한 문제일까요?나는 그렇다고 믿는다.

다른 팁

실제로, 정말 간단한 솔루션이 있습니다. 뒷면 항목에 대한 영점보기를 만듭니다.

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에 그것을 사용하면 나를 위해 작동하지 않았지만 ViewWillAppear 작업에 넣는 것이 좋습니다 (물론 한 번만 수행되도록 확인하여). 아이디어는 일부 초기화가 이미 완료된 후 TitleView를 설정하는 것입니다.

다음 코드는이 UIViewController에 대해서만 NavigationBar를 숨 깁니다.

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

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

따라서 uisearchbar가 uinavigationbar의 장소에 표시되도록하려면 루트보기 컨트롤러에 탐색 표시 줄이 정상적으로있는 검색 표시 줄이 있습니다!

어쩌면 애플은 이런 일을하기 위해 uisearchDisplayController를 사용하고있을 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top