내 루트보기 컨트롤러는 UISplitViewController
이고 preferredDisplayMode
은 UISplitViewControllerDisplayModeAllVisible
입니다. 상세 뷰 컨트롤러에서 나는 UISearchController
를 가지고,하지만 난 검색 창을 첨부 할 UITableView
이없는, 그래서보기 내부 UIView
을 배치하고 그것으로 검색 창을 추가UISplitViewController 모드가 모두 표시되면 UISearchController 검색 막대가 잘못 배치됩니다.
_searchController = [[UISearchController alloc] initWithSearchResultsController:nil];
_searchController.hidesNavigationBarDuringPresentation = NO;
// This is the view to contain search bar
_searchView.backgroundColor = [UIColor greenColor];
[_searchView addSubview:_searchController.searchBar];
self.navigationItem.leftBarButtonItem = self.splitViewController.displayModeButtonItem;
UPDATE : 이 경우 UIView
에 포함 된 경우뿐만 아니라 tableView.tableHeaderView
으로 설정된 UISearchBar
이 발생했습니다.
이 처음에 (나는 이미지의 높이립니다)처럼 보이는 것입니다 :
을하지만 검색 컨트롤러가 활성화 될 때, 검색 창 프레임의 origin.x
오른쪽으로 잘못되고, 정확히 마스터 뷰 컨트롤러의 폭과 같다 :
분할 뷰 컨트롤러가 UISplitViewControllerDisplayModePrimaryHidden
모드에
그래서 UISplitViewController
의 버그이다?
- (void)didPresentSearchController:(UISearchController *)searchController {
searchController.searchBar.superview.clipsToBounds = NO;
if (self.splitViewController.displayMode == UISplitViewControllerDisplayModeAllVisible) {
searchController.searchBar.frame = ({
CGRect frame = searchController.searchBar.frame;
frame.origin.x -= self.splitViewController.primaryColumnWidth;
frame;
});
}
}
당신이 다른 해결책을 발견하는 방법? iOS 10.3에서 같은 버그가 발생합니다. – CryingHippo