UITableView contenu chevauche Barre d'État lorsque UISearchBar est active
J'ai un UITableViewController avec un UISearchBar et UISearchDisplayController. Qui existe à l'intérieur d'un Conteneur de Vue dans un UIViewController qui est dans un UINavigationController. J'ai fait cette image pour décrire la structure:
C'est ce qu'il ressemble vraiment:
Quand je tape sur la Barre de Recherche, j'ai pour masquer la Barre de navigation. Normalement, cela devrait se produire sur son propre, mais depuis mon UITableViewController est à l'intérieur d'un Conteneur de Vue, je dois le gérer que le changement moi-même. C'est à quoi il ressemble ensuite, notez que la Barre d'État est blanc parce que la Barre de navigation est blanc, même s'il est Caché pour le moment.
Une fois que je commence à taper dans certains texte de la recherche, les résultats s'affichent. Si je défilement de ces résultats à la hausse, ils passent en dessous de la Barre de Recherche, mais ils se chevauchent la barre d'État, ce qui est très attrayant.
Si le Conteneur point de Vue n'est pas impliqué dans l'affaire, tout cela fonctionne comme prévu et le contenu de la table passe sous la Barre d'État, mais avec la ContainerView impliqués, le texte du tableau et de la barre d'état entrent en collision.
Comment puis-je obtenir le texte de passer sous la Barre d'État comme normal?
Vous devez vous connecter pour publier un commentaire.
J'ai chercher des heures et mon résultat final a été de mettre cette ligne dans le viewDidLoad:
self.extendedLayoutIncludesOpaqueBars = YES;
Problème résolu 🙂
self.extendedLayoutIncludesOpaqueBars = YES
dans le containerViewController et la searchResultsViewController.Essayer de régler le
definesPresentationContext
dansviewDidLoad
de votreTableViewController
Swift
Objective-C
Voici ce qui a fonctionné pour moi:
FAIRE:
- (UIBarPosition)positionForBar:(id<UIBarPositioning>)bar {
return UIBarPositionTopAttached;
}
N'EST PAS LE CAS:
J'ai UISearchBar et UISearchDisplayController.
Dans le viewdidload:
méthode d'obtenir une image à partir de UIColor:
Fondamentalement, cela est dû à la traslucency de la barre de navigation, généralement le point de vue du contrôleur correctif qui se chevauchent, en corrigeant le haut des encarts de la propriété de la vue ou de la sous-vue si ils sont(ou hérite) à partir de UIScrollView. Vous avez 2 options: l'une consiste à définir la traslucency de la barre de navigation à pas, l'autre est de définir la
edgeForExtendedLayout
à aucun minerai de ne laisser qu'en bas.Ces conseils ne fonctionne que sur iOS7, si vous déployez sur la cible inférieure vérifier avant de paramètres de ces propriétés.
Une autre façon de contourner, mais je n'ai pas testé on pouvait lire le
--topLayoutGuide
la longueur et au -searchDisplayControllerWillBeginSearch
essayer de mettre une topInsets de la même longueur. Dans ce sens, vous devriez toujours conserver la translucidité.-setAutomaticallyAdjustScrollInsets
J'ai eu le même problème:
Dans mon cas, je ne veux pas cacher le UINavigationBar mais j'ai eu des problèmes similaires avec trou béant et d'autres effets secondaires. L'un d'eux était un manque UISearchBar après la commutation entre UIViewControllers tandis que le UISearchDisplayController est visible (je suis en utilisant SWRevealViewController pour basculer entre UIViewController). Ce problème se produit uniquement sur les ipad. Il s'est avéré que le UISearchBar soudain se cache derrière le UINavigationBar. Maintenant, j'ai résolu tous mes Problèmes avec les lignes de code suivantes dans le UITableViewController qui est présenté dans un UIContainerView:
Ces lignes empêcher la UISearchDisplayController de toucher et de changer mon UINavigationController. J'ai aussi sous-classé cette méthode en "MyContainerTableViewController" de la classe et de l'utilisation de cette classe maintenant pour tous les UITableViewController.
Je suis toujours à l'aide de UISearchDisplayController pour Soutenir iOS 7.
Suivantes hack a fonctionné pour moi: