2014-12-16 3 views
6

이미 헤더보기가있는 UITableView에 UISearchBar를 추가하려고합니다. 내가 시도 할 때 기존의 헤더보기에 검색 표시 줄을 추가하면 UIT SearchController가 시도 할 때 검색 표시 줄이 tableview의 직접 하위보기가 아니기 때문에 나타나는 지점 인 The view hierarchy is not prepared for the constraint이 나타납니다. 업데이트 할 수없는 제약 조건을 업데이트하십시오.UITableViewHeader의 UISearchBar 하위보기?

내가 발견 한 유일한 방법은 테이블보기 헤더를 검색 창으로 만든 다음 모든 것이 올바르게 작동하지만 헤더보기에 이미 있던 다른보기는 잃어 버립니다.

답변

4

이 문제를 해결하려면 검색 바를 컨테이너 UIView에 넣으십시오. 이 컨테이너 뷰에 제약 조건을 적용하고 컨테이너 내의 검색 창에 자동 크기 지정 마스크를 사용합니다.

// Configure header view 
UIView *headerView = ... 
... 

// Create container view for search bar 
UIView *searchBarContainer = [UIView new]; 
searchBarContainer.translatesAutoresizingMaskIntoConstraints = NO; 
[searchBarContainer addSubview:self.searchBar]; 
[headerView addSubview:searchBarContainer]; 
self.searchBar.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; 

// Apply constraints involving searchBarContainer 
[headerView addConstraint: ...]; 
... 

// Then add header to table view 
self.tableView.tableHeaderView = headerView; 
+0

와우, 감사합니다! 귀하의 게시물을 찾을 때까지 여러 가지 해결 방법을 검색하고 시도하는 데 며칠이 걸렸습니다. UISearchController를 사용하고 있기 때문에 UISearchBar가 searchBarContainer에 추가 된 이상한 문제가 있지만 viewWillAppear를 체크인하면 더 이상 거기에 없으므로 수동으로 다시 추가해야합니다. 현재 UISearchBar를 컨테이너의 하위 뷰로 다시 추가 한 후 초기 프레임 괴상함에 맞서 싸우지 만 이것이 올바른 방향입니다. –

+0

이 속성을 viewWillAppear에 추가해야 할 수도 있습니다. if (self.searchBarContainerView.subviews.count == 0) { [self.searchBarContainerView addSubview : self.searchController.searchBar]; // 프레임 높이를 고쳐야합니다. CGRect frame = self.searchBarContainerView.frame; frame.size.height = 44.0f; self.searchBarContainerView.frame = frame; } –