Mon contrôleur de vue racine est un UISplitViewController
avec preferredDisplayMode
est UISplitViewControllerDisplayModeAllVisible
. Dans le détail contrôleur de vue, j'ai un UISearchController
, mais je n'ai pas UITableView
pour fixer la barre de recherche, donc je placé un UIView
dans la vue et ajouter une barre de recherche dans ce:Barre de recherche UISearchController égarée lorsque le mode UISplitViewController est visible
_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;
MISE À JOUR: Cela s'est également produit avec UISearchBar
mis à tableView.tableHeaderView
, non seulement lorsqu'il est contenu dans un UIView
.
C'est ce qu'il ressemble au premier abord (je cropped la hauteur de l'image):
Mais lorsque le contrôleur de recherche est actif, origin.x
de cadre de barre de recherche est déplacée vers la droite, est exactement égale à la largeur du contrôleur de vue maître:
Lorsque le contrôleur de vue est divisé en mode UISplitViewControllerDisplayModePrimaryHidden
, cela ne se produira pas, barre de recherche est affiché tout à fait normal:
Alors est-ce un bug de UISplitViewController
? Actuellement je fixe que cette façon laide, remise à zéro origin.x
de la barre de recherche, il est un peu glitch:
- (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;
});
}
}
Comment vous avez trouvé une autre solution? J'ai le même bug sur iOS 10.3 – CryingHippo