2014-12-16 16 views
6

Tôi muốn thêm UISearchBar vào UITableView đã có chế độ xem tiêu đề. Khi tôi thử và thêm thanh tìm kiếm vào chế độ xem tiêu đề hiện tại, nó hoạt động cho đến khi tôi chạm vào nó, tại thời điểm đó tôi nhận được The view hierarchy is not prepared for the constraint, có vẻ như là thanh tìm kiếm không phải là một chế độ xem trực tiếp của bảng nhìn sao cho khi UISearchController cố gắng cập nhật các ràng buộc mà nó không thể. Cách duy nhất xung quanh điều này mà tôi đã tìm thấy là làm cho đầu xem bảng tiêu đề thanh tìm kiếm, sau đó mọi thứ hoạt động tốt, nhưng tất nhiên sau đó tôi mất các chế độ xem khác đã có trong chế độ xem tiêu đề.UISearchBar subview của UITableViewHeader?

Trả lời

4

Để khắc phục hành vi này, tôi đặt thanh tìm kiếm của mình trong vùng chứa UIView. Áp dụng các ràng buộc cho chế độ xem vùng chứa này và sử dụng mặt nạ tự động hóa cho thanh tìm kiếm trong vùng chứa.

// 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

Ồ, cảm ơn! Nó đã cho tôi ngày tìm kiếm và cố gắng giải quyết khác nhau cho đến khi tìm bài viết của bạn. Kể từ khi tôi đang sử dụng UISearchController tôi có một vấn đề lạ, nơi UISearchBar được thêm vào searchBarContainer, nhưng sau đó khi tôi kiểm tra trong viewWillAppear nó không còn ở đó, vì vậy tôi phải tự thêm nó một lần nữa. Hiện đang chiến đấu chống lại khung hình kỳ lạ ban đầu sau khi thêm lại UISearchBar như một subview trong container, nhưng điều này chắc chắn là đi đúng hướng. –

+0

Bạn có thể phải thêm điều này trong viewWillAppear: if (self.searchBarContainerView.subviews.count == 0) { [self.searchBarContainerView addSubview: self.searchController.searchBar]; // cũng phải sửa chiều cao khung CGRect frame = self.searchBarContainerView.frame; frame.size.height = 44.0f; self.searchBarContainerView.frame = frame; } –